模板方法模式简介
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
一些方法通用,却在每一个子类都重新写了这一方法。关键代码在抽象类实现,其他步骤在子类实现。
优点 | 缺点 |
---|---|
封装不变的部分,扩展可变部分 | 每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大 |
提取公共代码,便于维护 | / |
行为由父类控制子类实现 | / |
C#模板方法模式Demo
using System;
namespace TemplateMethodPattern
{
class Program
{
static void Main(string[] args)
{
Exam zhangSan = new ZhangSan();
zhangSan.Question();
Exam liSi = new LiSi();
liSi.Question();
}
}
/// <summary>
/// Exam基类 模板方法 封装共有的方法Question() 扩展方法 Answer()
/// </summary>
public class Exam
{
public virtual string Name { get; set; }
public virtual string Answer()
{
return string.Empty;
}
public void Question()
{
Console.WriteLine(string.Format("{0}回答问题——今天暖和吗{1}", Name, Answer()) );
}
}
public class ZhangSan : Exam
{
public ZhangSan()
{
this.Name = "张三";
}
public override string Answer()
{
return "A";
}
}
public class LiSi : Exam
{
public LiSi()
{
this.Name = "李四";
}
public override string Answer()
{
return "B";
}
}
}
测试代码:
参考资料
https://www.runoob.com/design-pattern/design-pattern-tutorial.html
更多: