C#设计模式——模板方法模式
2016-02-13 17:01
288 查看
模板方法模式:
应用广泛的模式
一、意图:
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法结构即可重定义该算法的某些特定步骤。
二、作用:
代码复用平台,帮助子类摆脱重复的不变行为的纠缠。
基于继承的代码复用性
三、使用技巧:
先抽象出一个类,写出一些抽象行为放到子类中实现,写一个模板方法,推迟到子类实现。
四、特点:
优点:
不用再抄一遍题了。
提供了一个很好的代码复用平台。
把不变行为搬到超类,去除子类中的重复代码来体现它的优势。
五、应用:
1、模板方法结构图:
2、代码调用:
//定义抽象类
3、适用场景:
当我们要完成某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常考虑用模板方法模式来处理。
六、总结:
听名字,模板方法模式与原型模式有些像,但仔细看了看,他们区别还是很大的,模板方法模式解决了子类重复问题,而原型模式则是通过克隆完成,从一个对象再创建另外一个可定制的对象,而且不需知道任何创建的细节。而且他们的结构图区别也很大。对设计模式的学习正在进行中,欢迎大家前来指导交流学习!
谢谢交流!
应用广泛的模式
一、意图:
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法结构即可重定义该算法的某些特定步骤。
二、作用:
代码复用平台,帮助子类摆脱重复的不变行为的纠缠。
基于继承的代码复用性
三、使用技巧:
先抽象出一个类,写出一些抽象行为放到子类中实现,写一个模板方法,推迟到子类实现。
四、特点:
优点:
不用再抄一遍题了。
提供了一个很好的代码复用平台。
把不变行为搬到超类,去除子类中的重复代码来体现它的优势。
五、应用:
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、适用场景:
当我们要完成某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常考虑用模板方法模式来处理。
六、总结:
听名字,模板方法模式与原型模式有些像,但仔细看了看,他们区别还是很大的,模板方法模式解决了子类重复问题,而原型模式则是通过克隆完成,从一个对象再创建另外一个可定制的对象,而且不需知道任何创建的细节。而且他们的结构图区别也很大。对设计模式的学习正在进行中,欢迎大家前来指导交流学习!
谢谢交流!
相关文章推荐
- C#写计算器实例
- 单例模式
- C#设计模式——建造者模式
- 学习C# 继承 封装 多态
- 关于C#未能从程序集XXX加载XXX类型问题的解决方法
- c# enum の値を対応
- C#字典
- C#发送邮件时提示:“不允许使用邮箱名称。服务器响应为:”的错误解决办法
- C#里面Attribute的使用方法
- C# 的三种序列化方法
- C#事件触发机制
- c#基本知识:泛型集合的使用
- C#机房重构——万事开头难(一)
- Atitit. C#.net clr 2.0 4.0新特性
- Atitit. C#.net clr 2.0 4.0新特性
- Atitit. C#.net clr 2.0 4.0新特性
- C#成神之路<18> C#使用磁盘数据文件(2)
- CSharpGL(13)用GLSL实现点光源(point light)和平行光源(directional light)的漫反射(diffuse reflection)
- [C# 基础知识梳理系列]专题六:泛型基础篇——为什么引入泛型
- C#中的继承与多态还有接口