JAVA设计模式——模板方法模式
2012-09-20 09:32
756 查看
模板方法模式
在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
这个模式用来创建一个算法的模板。模板就是一个方法。更具体地说,这个方法将算法定义成一组步骤,其中的任何步骤都可以是抽象的,由子类负责实现。这可以确保算法的结构保持不变,同时由子类提供部分实现。
具体例子
抽象类:AbstractClass.java
具体类:ConcreteClass.java
测试类:Test.java
要点总结
1、模板方法定义了算法的步骤,把这些步骤的实现延迟到子类。
2、模板方法模式为我们提供了一种代码复用的重要技巧。
3、模板方法的抽象类可以定义具体方法、抽象方法和钩子。
4、抽象方法由子类实现。
5、钩子是一种方法,它在抽象类中不做事,或者只做默认的事情,子类可以选择要不要去覆盖它。
6、为了防止子类改变模板方法中的算法,可以将模板方法声明为final。
7、好莱坞原则告诉我们,将决策权放在高层模块中,以便决定如何以及何时调用低层模块。
8、你将在真实世界代码中看到模板方法的许多变体,不要期待它们全都是一眼就可以被你认出的。
9、策略模式和模板方法模式都是封装算法,一个用组合,一个用继承。
10、工厂方法是模板方法的一种特殊版本。
在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
这个模式用来创建一个算法的模板。模板就是一个方法。更具体地说,这个方法将算法定义成一组步骤,其中的任何步骤都可以是抽象的,由子类负责实现。这可以确保算法的结构保持不变,同时由子类提供部分实现。
具体例子
抽象类:AbstractClass.java
package com.designpattern.templatemethod; public abstract class AbstractClass { //模板方法,定义为final,子类不能覆盖此方法 public final void templateMethod() { primitiveOperation1(); primitiveOperation2(); hook(); if(isXXX()){ concreteOperation(); } } //原语操作1,抽象方法,子类必须实现 protected abstract void primitiveOperation1(); //原语操作2 protected abstract void primitiveOperation2(); //钩子操作 “默认不做事的方法” protected void hook(){ } //钩子操作,用于选择concreteOperation()步骤是否实现 protected boolean isXXX(){ return true; } //实现方法 private void concreteOperation(){ //这里是实现 System.out.println("AbstractClass -- concreteOperation"); } }
具体类:ConcreteClass.java
package com.designpattern.templatemethod; public class ConcreteClass extends AbstractClass { @Override protected void primitiveOperation1() { System.out.println("------ConcreteClass primitiveOperation1"); } @Override protected void primitiveOperation2() { System.out.println("------ConcreteClass primitiveOperation2"); } @Override protected boolean isXXX() { return true; } }
测试类:Test.java
package com.designpattern.templatemethod; public class Test { /** * @param args */ public static void main(String[] args) { new ConcreteClass().templateMethod(); } }
要点总结
1、模板方法定义了算法的步骤,把这些步骤的实现延迟到子类。
2、模板方法模式为我们提供了一种代码复用的重要技巧。
3、模板方法的抽象类可以定义具体方法、抽象方法和钩子。
4、抽象方法由子类实现。
5、钩子是一种方法,它在抽象类中不做事,或者只做默认的事情,子类可以选择要不要去覆盖它。
6、为了防止子类改变模板方法中的算法,可以将模板方法声明为final。
7、好莱坞原则告诉我们,将决策权放在高层模块中,以便决定如何以及何时调用低层模块。
8、你将在真实世界代码中看到模板方法的许多变体,不要期待它们全都是一眼就可以被你认出的。
9、策略模式和模板方法模式都是封装算法,一个用组合,一个用继承。
10、工厂方法是模板方法的一种特殊版本。
相关文章推荐
- Java复习之模板方法设计模式
- 【java】模板方法设计模式
- java设计模式之模板方法模式
- Java设计模式透析之 —— 模板方法(Template Method)
- JAVA学习--模板方法设计模式
- java设计模式---模板方法模式
- java设计模式(工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式、适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式,。 行为型模式,共十一种:策略模式、模板方法)
- java 设计模式之模板方法模式
- Java设计模式之模板方法模式(Template Method)
- 深入浅出Java模式设计之模板方法模式
- java设计模式之模板方法模式
- 【java设计模式】之 模板方法(Template Method)模式
- Java设计模式七:模板方法(Template Method)
- 【GOF23设计模式】_模板方法模式_钩子函数_方法回调_好莱坞原则JAVA249
- java设计模式之模板方法
- java设计模式-模板方法模式(Template Method)
- Java设计模式(十四)----模板方法模式
- java设计模式,模板方法模式
- Java模板方法设计模式
- JAVA设计模式之:模板方法模式