模板模式
定义:
封装了一个算法步骤,并允许子类为一个或者多个步骤方法提供实现。
uml图示:

其中templateMethod方法为封装好的模板算法步骤,其中abs开头的方法只父类的抽象方法,由子类继承实现,concrete开通的方法只父类实现好了,子类无需关系,hook方法只子类可以预定那些方法执行或者不执行。
代码部分:
public abstract class Template { /** * 抽象类定义里一系列算法的步骤,其中 * absOp1(); absOp2();是有子类具体实现的 * concreteOp1(); concreteOp2();是 有父类实现方法的,子类不能调整 * book();是有子类决定是否覆盖 */ final public void templateMethod() { absOp1(); absOp2(); concreteOp1(); concreteOp2(); book(); } abstract public void absOp1(); abstract public void absOp2(); final public void concreteOp1() { System.out.println("this is Template concreteMethod1!"); }; final public void concreteOp2() { System.out.println("this is Template concreteMethod2!"); }; public void book() { System.out.println("this is Template bookMethod!"); } } public class ConcreteTemplateA extends Template { @Override public void absOp1() { System.out.println("this is ConcreteTemplateA absOp1!"); } @Override public void absOp2() { System.out.println("this is ConcreteTemplateA absOp2!"); } } public class ConcreteTemplateB extends Template { @Override public void absOp1() { System.out.println("this is ConcreteTemplateB absOp1!"); } @Override public void absOp2() { System.out.println("this is ConcreteTemplateB absOp2!"); } public void book(){ System.out.println("this is ConcreteTemplateB bookMethod!"); } } public class test { public static void main(String[] args) { ConcreteTemplateA A=new ConcreteTemplateA(); ConcreteTemplateB B=new ConcreteTemplateB(); A.templateMethod(); B.templateMethod(); } }
浙公网安备 33010602011771号