模板方法模式
来源:互联网 发布:avast扫描慢 知乎 编辑:程序博客网 时间:2024/05/21 04:22
在定义功能时,功能的一部分是确定的,一部分是不确定的,而确定的部分在使用不确定的部分,那么这时就将不确定的部分暴露出去,由该类的子类去完成。
抽象类(AbstractClass):实现了模板方法,定义了算法的骨架。
具体类(ConcreteClass):实现抽象类中的抽象方法,已完成完整的算法。
eg: 计算某段程序的运行时间:
class GetTime{public final void getTime(){long start=System.currentTimeMilis();runcode();long end=System.currentTimeMilis();System.out.println("运行时间:"+(end-start))}public abstract void runcode();}class SubTime extends GetTime{public void runcode(){ ............. .............}}class Test{public static void main(String[] args){SubTime st=new SubTime();st.getTime();}}
该题中计算运行时间是固定的功能,而要运行的代码是不确定的。所以可以将要运行的代码封装成抽象方法,由子类去根据自己的需求来完成,而不希望被子类复写改变的getTime()方法可以用final关键字修饰一下。在该例子中,GetTime类是一个模板,用来完成不同的需求。
优点:
模板方法模式通过把不变的行为搬移到父类,去除了子类中的重复代码。
子类实现算法的某些细节,有助于算法的扩展。
通过一个父类调用子类实现的操作,通过子类扩展增加新的行为,符合“开放-封闭原则”。
适用场景:
在某些类的算法中,用了相同的方法,造成代码的重复。
控制子类扩展,子类必须遵守算法规则。
0 0
- 深入浅出模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法设计模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- TemplateMethod模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- linux在vi模式下的常用命令
- 基数排序 java实现
- 文件输入输出
- String数据类型
- CALayer深度解析
- 模板方法模式
- JavaScript的六种继承方式
- ip隐藏方法是什么
- 51nod 1279 扔盘子(思维题)
- Android中SQLite应用详解(很详细)
- 风险度量(广搜,并查集)
- Servlet线程安全问题
- BZOJ P2819 Nim
- SLF4j 和 common-logging和Log4J