模板方法模式 -- 大话设计模式
2015-10-30 14:03
246 查看
在今天,读书有时是件“麻烦”事。它需要你付出时间,付出精力,还要付出一份心境。--仅以《大话设计模式》来祭奠那逝去的……
模板方法模式:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重新定义改算法的某些特定步骤,例如现实生活中的简历模板、论文模板等等
模板方法模式是通过把不变行为搬移到超类,去除子类中的重复代码来体现它的优势,提供了一个很好的代码复用平台。当我们遇到一些过程从高层次看是相同的,但有些步骤的实现可能不同,这时候我们就可以考虑使用模板方法模式了
1.把大象放到冰箱里与把企鹅放到冰箱里的区别
打开冰箱,大象太大了!实在放不下,切吧切吧放吧~,关冰箱门;打开冰箱,把猪塞进去,关冰箱门
定义一个抽象类,将不一样的算法定义为虚方法,让子类可以重写其方法,来定义新的特定步骤
定义大象和企鹅两个子类,重写push方法,各自有各自不同的放法
开启场景模拟
模板方法模式:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重新定义改算法的某些特定步骤,例如现实生活中的简历模板、论文模板等等
模板方法模式是通过把不变行为搬移到超类,去除子类中的重复代码来体现它的优势,提供了一个很好的代码复用平台。当我们遇到一些过程从高层次看是相同的,但有些步骤的实现可能不同,这时候我们就可以考虑使用模板方法模式了
1.把大象放到冰箱里与把企鹅放到冰箱里的区别
打开冰箱,大象太大了!实在放不下,切吧切吧放吧~,关冰箱门;打开冰箱,把猪塞进去,关冰箱门
定义一个抽象类,将不一样的算法定义为虚方法,让子类可以重写其方法,来定义新的特定步骤
public abstract class AnimalTemplate { protected string _name; public AnimalTemplate() { this._name = "动物"; } public void Operate() { Console.WriteLine("把{0}放到冰箱里面的过程:", this._name); this.OpenDoor(); this.Push(); this.CloseDoor(); } public void OpenDoor() { Console.WriteLine("1.打开冰箱门"); } public virtual void Push() { Console.WriteLine("2.把{0}塞进去", this._name); } public void CloseDoor() { Console.WriteLine("2.关冰箱门"); } }
定义大象和企鹅两个子类,重写push方法,各自有各自不同的放法
public class Elephant : AnimalTemplate { public Elephant() { this._name = "大象"; } public override void Push() { Console.WriteLine("2.大象太大了!实在放不下,切吧切吧放吧~"); } } public class Penguin : AnimalTemplate { public Penguin() { this._name = "企鹅"; } public override void Push() { base.Push(); } }
开启场景模拟
static void Main(string[] args) { //把大象放到冰箱里 AnimalTemplate elephant = new Elephant(); elephant.Operate(); //把企鹅放到冰箱里 AnimalTemplate penguin = new Penguin(); penguin.Operate(); }
相关文章推荐
- 常用的MIME类型
- Binder进程间通信机制的Client进程和Server进程的通信过程
- 关于pg的EXTRACT(8:00-10:00)
- 1039. 到底买不买(20)
- 51nod 1101 换零钱 (0-1背包,DP)
- 网络通信基础
- unity寻路——一劳永逸地解决寻路问题
- datatables页面的刷新操作
- ubuntu 12.04LTS adb命令不识别设备的解决办法
- Trie树|前缀树的介绍与实现
- 原型模式 -- 大话设计模式
- React常用事件
- C/C++ 面试题---测试一下你的内功
- C++折半插入排序
- 又见面了,OBJC君!
- iPhone上如何侦测到系统的语言设定
- C++内存泄露检测
- Android L+ Theme 与 Toolbar 实例
- 微博,QQ空间,豆瓣的web版分享 pc和mobile通用
- delphi 金额大小写转换函数