编程语言 php java

java设计模式-模板方法模式

java HTML我帮您 1年前  0次浏览
一. 模式概述
  摸板方法(Template Method)模式是一种非常简单而又经常使用的设计模式.先创建一个父类,把其中的一个或多个方法留给子类去实现,这实际上就是在使用摸板模式.所谓的摸板模式可以这样来理解:"在一个类中定义一个算法,但将此算法的 些细节留到子类中去实现.换句话说,基类是一个抽象类,那么你就是在使用一种简单形式的摸板模式."更近一步可以这样来
理解:"准备一个抽象类,将部分逻辑以具体方法的形式实现,然后申明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类
可以以不同的方法实现这些抽象方法,从而对剩余的逻辑有不同的实现."
二. 模式意图
  将一个类的基本部分抽取出来放到一个基类中,这样它就不必重复出现在几个派生类里.
三. 模式结构与参与者
抽象摸板角色:
  1. 定义了一个或多个抽象操作,以便让子类实现.
  2. 定义并实现了一个摸板方法.
具体摸板角色:
  1. 实现父类所定义的一个或多个抽象方法.
  2. 每一个抽象摸板角色都可以有任意多个具体摸板角色与之对应.
  3. 每一个具体摸板角色都可以给出这些抽象方法的不同实现.
四. 模式中的方法种类
  1. 抽象模板角色里提供完整的方法,它完成了所有派生类都要用到的一些基本功能.
  2. 抽象模板角色里只提供空方法,把功能全部留给派生类去实现.
  3. 抽象模板角色里只包含某些操作的默认实现,派生类里可以重新定义这些方法的实现.
五.举例
abstract class AbstractTemplateMethod {

protected abstract void method1();

protected abstract void method2();

// 模板方法,统一调用上面两个在子类中会被实现的方法,即不同的实现
public final void templateMethod() {
/*
* 此方法体内也可以通过“钩子方法”来实现根据一定情况调用 不同的方法组合
*/
if (hookMethod()) {
method1();
} else {
method1();
method2();
}
}

// 钩子方法,protected权限可被子类覆盖,默认为返回true
protected boolean hookMethod() {
return true;
}
}




class TemplateMethodA extends AbstractTemplateMethod {
protected void method1() {
System.out.println("子类 A :method1() ...");
}

protected void method2() {
System.out.println("子类 A :method2() ...");
}
}

class TemplateMethodB extends AbstractTemplateMethod {
protected void method1() {
System.out.println("子类 B :method1() ...");
}

protected void method2() {
System.out.println("子类 B :method2() ...");
}

// 覆盖钩子方法
protected boolean hookMethod() {
return false;
}
}

public class Client {
public static void main(String<> args) {
AbstractTemplateMethod methodA = new TemplateMethodA();
methodA.templateMethod();

AbstractTemplateMethod methodB = new TemplateMethodB();
methodB.templateMethod();
}
}

六.要点总结

1、模板方法定义了算法的步骤,把这些步骤的实现延迟到子类。
2、模板方法模式为我们提供了一种代码复用的重要技巧。
3、模板方法的抽象类可以定义具体方法、抽象方法和钩子。
4、抽象方法由子类实现。
5、钩子是一种方法,它在抽象类中不做事,或者只做默认的事情,子类可以选择要不要去覆盖它。
6、为了防止子类改变模板方法中的算法,可以将模板方法声明为final。
7、好莱坞原则告诉我们,将决策权放在高层模块中,以便决定如何以及何时调用低层模块。
8、你将在真实世界代码中看到模板方法的许多变体,不要期待它们全都是一眼就可以被你认出的。
9、策略模式和模板方法模式都是封装算法,一个用组合,一个用继承。
10、工厂方法是模板方法的一种特殊版本。





发表评论