模板方法(Template Method)模式属于行为模式,定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。这里的算法的结构,可以理解为你根据需求设计出来的业务流程。特定的步骤就是指那些可能在内容上存在变数的环节。
[img]http://tech.ccidnet.com/col/attachment/2009/10/1943419.jpg[/img]
结构模式:
1) AbstractClass(抽象类):定义了一到多个的抽象方法,以供具体的子类来实现它们;而且还要实现一个模板方法,来定义一个算法的骨架。该模板方法不仅调用前面的抽象方法,也可以调用其他的操作,只要能完成自身的使命。
2) ConcreteClass(具体类):实现父类中的抽象方法以完成算法中与特定子类相关的步骤。
模板:
具体类
[img]http://tech.ccidnet.com/col/attachment/2009/10/1943419.jpg[/img]
结构模式:
1) AbstractClass(抽象类):定义了一到多个的抽象方法,以供具体的子类来实现它们;而且还要实现一个模板方法,来定义一个算法的骨架。该模板方法不仅调用前面的抽象方法,也可以调用其他的操作,只要能完成自身的使命。
2) ConcreteClass(具体类):实现父类中的抽象方法以完成算法中与特定子类相关的步骤。
模板:
public abstract class Print {
protected abstract void printName();
protected abstract void printAge();
public void show() {
this.printName();
this.printAge();
System.out.println(this);
}
}
具体类
public class PrintA extends Print {
@Override
protected void printAge() {
System.out.println("20");
}
@Override
protected void printName() {
System.out.println("This is A");
}
}
public class PrintB extends Print {
@Override
protected void printAge() {
System.out.println("18");
}
@Override
protected void printName() {
System.out.println("This is B");
}
}
public class Test {
public static void main(String[] args) {
Print p = new PrintA();
p.show();
Print pp = new PrintB();
pp.show();
}
}