template pattern 即模板模式 核心思想:產品不變的部分首先實現,將易變的部分抽象出來供子類完成。
例如:一雙運動鞋大體制作流程各廠家基本一致,但是各環節實現細節可有些不一樣,不一樣的部分抽象出來讓不同廠家實現。即先有個框架,細節交給不同廠家實現
編程實例:趙本山小品中提到的將大象裝進冰箱分幾步:
1,,把冰箱門打開
2,把大象放進去
3,把冰箱門關上
這是是該問題的主要解決步驟,而細節的描述因人而異
代碼如下:
public interface ObjectLoader {
public void loadObject();
public void process();
public void cleanUp();
}
public abstract class AbstractLoadObject implements ObjectLoader{
@Override
public abstract void loadObject();
@Override
public void process() {
// TODO Auto-generated method stub
this.loadObject();
this.cleanUp();
}
@Override
public abstract void cleanUp();
}
public abstract class ElephantLoader extends AbstractLoadObject{
@Override
public void loadObject() {
// TODO Auto-generated method stub
openFidge();
fillinElephant();
}
@Override
public void cleanUp() {
// TODO Auto-generated method stub
closeFridge();
}
@Override
public void process() {
// TODO Auto-generated method stub
findFridge();
fillinElephant();
super.process();
}
public void findElephant(){
trace("找到一頭大象");
}
public void findFridge(){
trace("找到一個冰箱");
}
protected void trace(String string) {
// TODO Auto-generated method stub
System.out.println(string);
}
public abstract void openFidge();
public abstract void fillinElephant();
public abstract void closeFridge();
}
public class ElephantLoaderImp extends ElephantLoader {
@Override
public void openFidge() {
// TODO Auto-generated method stub
trace("打開冰箱門");
}
@Override
public void fillinElephant() {
// TODO Auto-generated method stub
trace("裝入冰箱");
}
@Override
public void closeFridge() {
// TODO Auto-generated method stub
trace("關閉冰箱門");
}
}