設計模式之裝飾模式

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("關閉冰箱門");
	}

}





發佈了59 篇原創文章 · 獲贊 5 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章