模板方法模式:
应用广泛的模式
一、意图:
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法结构即可重定义该算法的某些特定步骤。
二、作用:
- 代码复用平台,帮助子类摆脱重复的不变行为的纠缠。
- 基于继承的代码复用性
三、使用技巧:
先抽象出一个类,写出一些抽象行为放到子类中实现,写一个模板方法,推迟到子类实现。
四、特点:
优点:
不用再抄一遍题了。
- 提供了一个很好的代码复用平台。
- 把不变行为搬到超类,去除子类中的重复代码来体现它的优势。
五、应用:
1、模板方法结构图:
2、代码调用:
//定义抽象类
public abstract class Employee
{
public void GetSalary()//模板方法
{
GetBasicSalary();
AddBonus();
}
protected abstract void GetBasicSalary();//抽象行为,放到子类中实现
protected abstract void AddBonus();//抽象行为,放到子类中实现
}
//接着分别实现经理和CEO的薪资
public class Manager : Employee
{
protected override void GetBasicSalary()
{
Console.WriteLine("GetManager Basic Salary");
}
protected override void AddBonus()
{
Console.WriteLine("AddManager Bonus");
}
}
public class CEO : Employee
{
protected override void GetBasicSalary()
{
Console.WriteLine("Add CEO Bonus");
}
}
3、适用场景:
当我们要完成某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常考虑用模板方法模式来处理。
六、总结:
听名字,模板方法模式与原型模式有些像,但仔细看了看,他们区别还是很大的,模板方法模式解决了子类重复问题,而原型模式则是通过克隆完成,从一个对象再创建另外一个可定制的对象,而且不需知道任何创建的细节。而且他们的结构图区别也很大。对设计模式的学习正在进行中,欢迎大家前来指导交流学习!
谢谢交流!