一、 定义
模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以再不改变算法结构的情况下,重新定义算法中的某些步骤。
示例:
二、 现实中的模板方法模式
2.1 钩子(也就是通常说的回调callback)
钩子是一种被声明在抽象类中的方法,但只有空的或者默认的实现。钩子的存在,可以让子类有能力对算法的不同点进行重写,要不要重写,子类可以自行决定,如果不重写,抽象类会提供一个默认的实现。钩子方法有一点点区别就是不需要声明为abstract的。
这里引入一个设计原则:
好莱坞原则
Do not call me, I will call you.
这个原则可以给我们一种防止“依赖腐 败”的方法。当高层组件依赖底层组件,而底层组件又依赖高层组件,高层组件又依赖其他组件,其他组件又依赖底层组件时,依赖腐 败就发生了。这种情况下,没有人可以轻易地搞懂系统是如何设计的。
好莱坞原则之下,我们允许底层组件将自己挂钩到系统上,但是高层组件会决定什么时候和怎样使用这些底层组件。换句话说,高层组件对底层组件的方式是“别调用我们,我们会调用你”。
2.2 排序
JDK中Arrays.sort(Object[] a):
public static void sort(Object[] a) {
Object[] aux = (Object[])a.clone();
mergeSort(aux, a, 0, a.length, 0);
}
这里的mergeSort方法是实际的排序算法,这里又依赖于compareTo()方法,这个方法需要用户实现,也就是要排序的对象需要实现,通过实现Comparable接口来强制实现该方法(类似继承abstract类必须实现它的abstract方法)。
2.3 InputStream的read()方法
Java.io.InputStream类有一个read()方法,是需要子类来实现的,然后read()方法又被read(byte b[], int off, int len)模板方法来使用。
三、 模板方法模式和策略模式
策略模式是基于依赖接口和对象组合的思想实现的,而且策略模式中的算法类是实现整个算法,而模板方法模式不是组合,而是继承,而且只是实现算法的一部分,并不是整个。
参考资料
《HeadFirst设计模式》
- 大小: 248.7 KB
- 大小: 96.4 KB
分享到:
相关推荐
设计模式C++学习之模板方法模式(Template Method)
Head First 设计模式 (八) 模板方法模式(Template Method pattern) C++实现
模板方法(TemplateMethod) 用意:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
模板方法模式是一种行为设计模式,它在一个方法中定义算法的骨架,将一些步骤延迟到子类中实现。 具体来说,模板方法模式的关键特点包括: 抽象类:在抽象类中定义一个模板方法,该方法给出了算法的框架。 具体...
主要为大家详细介绍了C++设计模式之模板方法模式TemplateMethod,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
9、模板方法模式TEMPLATE METHOD PATTERN 10、建造者模式BUILDER PATTERN 11、桥梁模式BRIDGE PATTERN 12、命令模式COMMAND PATTERN 13、装饰模式DECORATOR PATTERN 14、迭代器模式ITERATOR PATTERN 15、组合...
走进设计模式之—— Template(模板模式)
模版方法模式TemplatePattern(java),博文附件
设计模式——模板方法模式模板方法模式(Template Method Pattern):定义一个操作中的算法骨架,将一些步骤延迟至子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤使用场景:当不变和可...
模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。
具体的子类继承抽象模板类,并实现其中的抽象方法,完成自己的特定操作步骤。模板方法模式能够提供代码的复用性和扩展性,将通用的操作步骤封装在抽象模板类中,而具体的实现可以由子类灵活扩展和改变。
在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。 模板方法模式 java ...
模板方法模式(Template Method Pattern):定义一个操作中的算法骨架,将一些步骤延迟至子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 下面是一个模板方法模式的一个demo: #!/...
定义模板方法和一些基本的操作步骤,其中模板方法通过调用其他具体方法组合完成操作。
设计模式中的策略模式,template模式详细讲解。
c++设计模式-行为型模式-模板方法模式...模板方法(Template Method)模式的定义如下:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。
主要介绍了Java设计模式模板方法(Template)原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
主要介绍了Java设计模式模板方法模式(Template)用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
template-method-demo 模板方法示例
主要介绍了C#模板方法模式(Template Method Pattern),以实例形式讲述了C#抽象类模板方法的用法,具有很高的实用价值,需要的朋友可以参考下