设计模式之装饰模式

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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章