将具体处理交给子类
是什么
在父类中(通常是抽象类)定义处理流程的框架,在子类中实现具体处理的模式就是模板方法模式。
组成模板的方法被定义在父类中,由于这些方法是抽象方法,所以只查看父类的代码无法知道这些发最终会进行何种具体处理,能看出来的只有方法调用的轨迹(处理流程),具体的细节都交由子类去实现来填充这个流程。
如并发包里面的AbstractQueuedSynchronizer类里面就大量使用了模板方法模式。如acquire(),release().
示例代码
public abstract class AbstractDisplay{
protected abstract void open();
protected abstract void print();
protected abstract void close();
// 如果不希望逻辑变更,可以设置为final不允许重写逻辑
public void display(){
open();
print();
close();
}
}
// 子类
public class StringDisplay extends AbstractDisplay{
@Override
public void open(){
System.out.println("open it");
}
@Override
public void print(){
System.out.println("pppppppp");
}
@Override
public void close(){
System.out.println("close");
}
}
//client
public static void main(String[] args){
StringDisplay sd = new StringDisplay();
sd.display();
}
总结
- 模板方法模式的优点是处理流程(算法)在父类中已经定义好了无需在子类中再编写算法。
- 父类和子类的联系很紧密,在实现父类方法时,需要了解处理逻辑,否则很难编写具体实现方法。
网友评论