將具體處理交給子類
是什么
在父類中(通常是抽象類)定義處理流程的框架彭羹,在子類中實現(xiàn)具體處理的模式就是模板方法模式铺敌。
組成模板的方法被定義在父類中踢涌,由于這些方法是抽象方法黔龟,所以只查看父類的代碼無法知道這些發(fā)最終會進(jìn)行何種具體處理历等,能看出來的只有方法調(diào)用的軌跡(處理流程)讨惩,具體的細(xì)節(jié)都交由子類去實現(xiàn)來填充這個流程。
如并發(fā)包里面的AbstractQueuedSynchronizer類里面就大量使用了模板方法模式寒屯。如acquire(),release().
示例代碼
public abstract class AbstractDisplay{
protected abstract void open();
protected abstract void print();
protected abstract void close();
// 如果不希望邏輯變更荐捻,可以設(shè)置為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();
}
總結(jié)
- 模板方法模式的優(yōu)點是處理流程(算法)在父類中已經(jīng)定義好了無需在子類中再編寫算法。
- 父類和子類的聯(lián)系很緊密寡夹,在實現(xiàn)父類方法時处面,需要了解處理邏輯,否則很難編寫具體實現(xiàn)方法菩掏。