模版方法模式(template):定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模版方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定功能。
类图:
代码:
publicabstractclass AbstractClass {
publicvoid templateMethod(){
operation1();
operation2();
}
protectedabstractvoid operation1();
protectedabstractvoid operation2();
}
publicclass ConcreteClassA extends AbstractClass {
@Override
protectedvoid operation1() {
System.out.println("A1");
}
@Override
protectedvoid operation2() {
System.out.println("A2");
}
}
publicclass ConcreteClassB extends AbstractClass {
@Override
protectedvoid operation1() {
System.out.println("B1");
}
@Override
protectedvoid operation2() {
System.out.println("B1");
}
}
publicstaticvoid main(String[] args) {
AbstractClass ac=new ConcreteClassA();
ac.templateMethod();
System.out.println("-----------------");
ac=new ConcreteClassB();
ac.templateMethod();
}
优点:把相同的代码抽到父类,子类实现不同的代码;改变方法是具体实现。
缺点:子类必须重写代码(就算功能一样),改变算法结构
模板方法像是一个简单的框架。定义了业务的结构,但具体的实现可以自由实现/扩展。