设计模式之模板方法模式

来源:互联网 发布:东华软件项目经理待遇 编辑:程序博客网 时间:2024/05/16 06:34

GOF对模板方法模式的定义:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。Template使得子类可以不改变一个算法的结构而重新定义算法的某些特定步骤。先看下基本代码结构。

public abstract class AbstractClass {public abstract void primitiveOperationA();public abstract void primitiveOperationB();public abstract void primitiveOperationC();public void TemplementMethod() {primitiveOperationA();primitiveOperationB();primitiveOperationC();}}
定义两个实现子类

public class ConcreteClassA extends AbstractClass {@Overridepublic void primitiveOperationA() {System.out.println("操作方法A来自具体类A");}@Overridepublic void primitiveOperationB() {System.out.println("操作方法B来自具体类A");}@Overridepublic void primitiveOperationC() {System.out.println("操作方法C来自具体类A");}}public class ConcreteClassB extends AbstractClass {@Overridepublic void primitiveOperationA() {System.out.println("操作方法A来自具体类B");}@Overridepublic void primitiveOperationB() {System.out.println("操作方法B来自具体类B");}@Overridepublic void primitiveOperationC() {System.out.println("操作方法C来自具体类B");}}
客户端实现

public class Client {public static void main(String[] args) {AbstractClass A ;A = new ConcreteClassA();A.TemplementMethod();A = new ConcreteClassB();A.TemplementMethod();}}
运行截图


使用抽象方法的目的就是给继承的子类重写,从而达到子类个性化定制的目的。

模板方法比较简单而且常用,甚至在Java的类库值也会使用模板方法来提取公共行为到抽象类中,很好的实现了代码的复用平台。一般使用模板模式有如下几种情况:

1.一次性实现算法不变的部分,将可变的部分交给子类实现;

2.子类中的公共行为提取到公共的父类中,并且子类有自己的个性化需求的时候;

3.一般子类需要扩展的地方也是固定的,即仅允许在这些点进行扩展。这也恰恰是模板模式的局限性所在。

以上内容,整理自刘径舟,张玉华编著的《设计模式其实很简单》读书笔记,欢迎转载

原创粉丝点击