打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
【C#设计模式-模板模式】
一.定义:在一个抽象类中定义一个操作中的算法骨架(对应于生活中的大家下载的模板),而将一些步骤延迟到子类中去实现(对应于我们根据自己的情况向模板填充内容)。模板方法使得子类可以不改变一个算法的结构前提下,重新定义算法的某些特定步骤,模板方法模式把不变行为搬到超类中,从而去除了子类中的重复代码。
二.实现:引用生活中上班的例子,员工上班遵循前往上班目的地,上班打卡,然后执行自己的工作,最后下班打卡的这样一个流程。
[csharp] view plain copy
print?
/// <summary>
/// 抽象上班模板
/// </summary>
public abstract class working
{
// 模板方法,不要把模版方法定义为Virtual或abstract方法,避免被子类重写,防止更改流程的执行顺序
public void Init(string name)
{
this.gotocompany(name);
this.clockin(name);
this.workings(name);
this.offduty(name);
}
/// <summary>
/// 去公司
/// </summary>
public abstract void gotocompany(string name);
/// <summary>
/// 打卡
/// </summary>
private void clockin(string name)
{
Console.WriteLine("员工:" + name + "上班打卡");
}
/// <summary>
/// 开展自己的工作
/// </summary>
/// <param name="name"></param>
public abstract void workings(string name);
/// <summary>
/// 下班打卡
/// </summary>
/// <param name="name"></param>
private void offduty(string name)
{
Console.WriteLine("员工:" + name + "下班班打卡");
}
}
[csharp] view plain copy
print?
/// <summary>
/// 员工A
/// </summary>
public class employeeA:working
{
public override void gotocompany(string name)
{
Console.WriteLine(name+"员工做地图前往公司");
}
public override void workings(string name)
{
Console.WriteLine(name+"员工开展程序编码工作");
}
}
[csharp] view plain copy
print?
/// <summary>
/// C#设计模式-模板方法模式
/// </summary>
class Program
{
static void Main(string[] args)
{
working w = new employeeA();
w.Init("A");
}
}
模板方法模式中涉及了两个角色:抽象模板角色(Vegetable扮演这个角色):定义了一个或多个抽象操作,以便让子类实现,这些抽象操作称为基本操作。
具体模板角色(ChineseCabbage和Spinach扮演这个角色):实现父类所定义的一个或多个抽象方法。
优点:实现了代码复用,能够灵活应对子步骤的变化,符合开放-封闭原则
缺点:因为引入了一个抽象类,如果具体实现过多的话,需要用户或开发人员需要花更多的时间去理清类之间的关系。
在.NET中模板方法的应用也很多,我们在开发自定义的Web控件或WinForm控件时,我们只需要重写某个控件的部分方法。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
【设计模式】模板模式
设计模式之模板方法
设计模式(14) 模板方法模式
结合案例深入解析模板方法设计模式
OOP设计思考——何时使用接口?
设计模式之模板方法模式
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服