您的位置:首页 > 其它

创造者模式

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.html
http://www.cnblogs.com/wuyuegb2312/archive/2013/04/09/3008320.html http://www.cnblogs.com/Terrylee/archive/2006/07/17/334911.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: