创造者模式
2014-08-23 11:21
218 查看
模式说明
建造者模式将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。建造者模式构建复杂对象就像造汽车一样,是一个一个组件一个一个步骤创建出来的,它允许用户通过制定的对象类型和内容来创建他们,但是用户并不需要知道这个复杂对象是如何构建的,它只需要明白通过这样做我可以得到一个完整的复杂对象实例。
和工厂方法很像,创造者是一个builder内每个方法分别创建产品零部件,而工厂方法是每个factory生产一个产品。如果把builder的零部件当做一个完整产品呢?是不是就像 builder又再一次封装了factory~
模式结构图
程序示例
说明:一个套餐类,两个派生套餐(每个套餐有不同食品);一个创造者类,两个派生创造者分别创建两种套餐;一个指挥者用来设定要创造哪个套餐。
程序:
class Meal(object): _food='' _drink='' def setfood(self,food): self._food=food def setdrink(self,drink): self._drink=drink def getfood(self): return self._food def getdrink(self): return self._drink class MealBuilder(object): _meal = Meal() def buildFood(self): pass def buildDrink(self): pass def getMeal(self): return self.meal class MealABuilder(MealBuilder): def buildFood(self): self._meal.setfood('meal A food') def buildDrink(self): self._meal.setdrink('meal A drink') class MealBBuilder(MealBuilder): def buildFood(self): self._meal.setfood('meal B food') def buildDrink(self): self._meal.setdrink('meal B drink') class director(object): _mealuilder = MealBuilder() def setBuilder(self,mealBuilder): self._mealuilder = mealBuilder def PrepareMeal(self): self._mealuilder.buildDrink() self._mealuilder.buildFood() return self._mealuilder._meal if __name__=='__main__': mealbuilder = MealABuilder() waitor = director() waitor.setBuilder(mealbuilder) meal = waitor.PrepareMeal() print meal.getdrink()+"\t"+meal.getfood() mealbuilder = MealBBuilder() waitor = director() waitor.setBuilder(mealbuilder) meal = waitor.PrepareMeal() print meal.getdrink()+"\t"+meal.getfood()
运行效果:
参考来源:
http://www.cnblogs.com/chenssy/p/3679190.htmlhttp://www.cnblogs.com/wuyuegb2312/archive/2013/04/09/3008320.html http://www.cnblogs.com/Terrylee/archive/2006/07/17/334911.html
相关文章推荐
- 创造者模式
- 设计模式-创造者模式(Builder)
- 设计模式--(Builder)创造者模式
- 设配器模式不止是补救,有时更像是一个创造者
- javascript --- 设计模式之创造者模式
- 设计模式-创造者模式(Builder) 4000
- 设计模式之创造者模式 Builder
- 创造者模式
- 创造者模式
- 让DMA66 硬盘工作在DMA33 模式
- 特效天地——淡入淡出(真彩模式)
- OpenSource产品的商业操作模式
- COM组件中的线程模式
- 打开你的 DMA 模式 (转)
- 水木-Emacs 的 texinfo 模式 (三)
- 水木-Emacs 的 texinfo 模式 (二)
- 水木-Emacs 的 texinfo 模式(一)
- 虚拟8086模式的内存管理
- 16位BIT模式下的ALPHA运算
- 用于核心模式驱动程序的网络体系结构(1)