design pattern——模板方法模式
针对问题:许多类可能做着大同小异的事情,很多方法都有重复,可以将这些类抽象出一个继承结构,将重复的部分放在父类中来实现复用,而不同的地方由子类提供实现,和工厂方法模式类似。并且由子类提供实现这些思想可以大量用于类似回调的功能,例如java api 集合的排序功能。
?
模板方法模式?定义了一个算法的步骤,并允许子类为一个或多个步骤提供其实践方式。让子类别在不改变算法架构的情况下,重新定义算法中的某些步骤。
?
?
?
?
模板方法模式结构图:
?

?
?
?
?
?
模板方法模式实现代码:
?
/** * 模板父类 * @author bruce * */public abstract class AbstractClass {/** * 模板方法 */public void templateMethod(){// other methodprimitiveOperation1();//other methodprimitiveOperation2();//other method}public abstract void primitiveOperation1();public abstract void primitiveOperation2();}/** * 模板方法实现类A * @author bruce * */public class ConcreteClassA extends AbstractClass{@Overridepublic void primitiveOperation1() {// TODO Auto-generated method stubSystem.out.println("A: operation1");}@Overridepublic void primitiveOperation2() {// TODO Auto-generated method stubSystem.out.println("A: operation2");}}/** * 模板方法实现类B * @author bruce * */public class ConcreteClassB extends AbstractClass{@Overridepublic void primitiveOperation1() {// TODO Auto-generated method stubSystem.out.println("B: operation1");}@Overridepublic void primitiveOperation2() {// TODO Auto-generated method stubSystem.out.println("B: operation2");}}/** * 测试 * @author bruce * */public class Client {public static void main(String[] args) {AbstractClass aClass=new ConcreteClassA();aClass.templateMethod();System.out.println("----------");aClass=new ConcreteClassB();aClass.templateMethod();/** * output: A: operation1 A: operation2 ---------- B: operation1 B: operation2 */}}