博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
创造者模式
阅读量:4539 次
发布时间:2019-06-08

本文共 2121 字,大约阅读时间需要 7 分钟。

模式说明

建造者模式将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。

建造者模式构建复杂对象就像造汽车一样,是一个一个组件一个一个步骤创建出来的,它允许用户通过制定的对象类型和内容来创建他们,但是用户并不需要知道这个复杂对象是如何构建的,它只需要明白通过这样做我可以得到一个完整的复杂对象实例。

和工厂方法很像,创造者是一个builder内每个方法分别创建产品零部件,而工厂方法是每个factory生产一个产品。如果把builder的零部件当做一个完整产品呢?是不是就像 builder又再一次封装了factory~

 

模式结构图

程序示例

说明:

一个套餐类,两个派生套餐(每个套餐有不同食品);一个创造者类,两个派生创造者分别创建两种套餐;一个指挥者用来设定要创造哪个套餐。

程序:

1 class Meal(object): 2     _food='' 3     _drink='' 4     def setfood(self,food): 5         self._food=food 6     def setdrink(self,drink): 7         self._drink=drink 8     def getfood(self): 9         return self._food10     def getdrink(self):11         return self._drink12 13 class MealBuilder(object):14     _meal = Meal()15     def buildFood(self):16         pass17 18     def buildDrink(self):19         pass20 21     def getMeal(self):22         return self.meal23 24 25 class MealABuilder(MealBuilder):26     def buildFood(self):27         self._meal.setfood('meal A food')28     def buildDrink(self):29         self._meal.setdrink('meal A drink')30 31 class MealBBuilder(MealBuilder):32     def buildFood(self):33         self._meal.setfood('meal B food')34     def buildDrink(self):35         self._meal.setdrink('meal B drink')36 37 class director(object):38     _mealuilder = MealBuilder()39     def setBuilder(self,mealBuilder):40         self._mealuilder = mealBuilder41     def PrepareMeal(self):42         self._mealuilder.buildDrink()43         self._mealuilder.buildFood()44         return self._mealuilder._meal45 46 47 if __name__=='__main__':48     mealbuilder = MealABuilder()49     waitor = director()50     waitor.setBuilder(mealbuilder)51     meal = waitor.PrepareMeal()52     print meal.getdrink()+"\t"+meal.getfood()53 54     mealbuilder = MealBBuilder()55     waitor = director()56     waitor.setBuilder(mealbuilder)57     meal = waitor.PrepareMeal()58     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

 

转载于:https://www.cnblogs.com/cotton/p/3930821.html

你可能感兴趣的文章
史上最简单MySQL教程详解(基础篇)之数据类型
查看>>
802.11 帧封装细节
查看>>
flask 基本配置和参数解释
查看>>
HDMI转EDP芯片NCS8803简介
查看>>
Git查看、删除、重命名远程分支和tag
查看>>
nexus4/5/6/7/9/10设备谷歌安卓5.1.1系统底包下载
查看>>
子界类型的应用
查看>>
ubuntu系统中查看本机cpu和内存信息的命令和用法
查看>>
es6 箭头函数
查看>>
python装饰器的作用
查看>>
[bzoj2510]弱题 (循环矩阵优化dp)
查看>>
Django Form 的主要内置字段介绍
查看>>
如何写好一个UITableView
查看>>
XML文件生成C++代码(基于rapidxml)
查看>>
写代码,更需要设计代码
查看>>
iOS:修改项目名
查看>>
SpringCloud-Eureka
查看>>
double在输出为字符串的几种方法效率测试
查看>>
ArcGIS API for JavaScript 4.2学习笔记[14] 弹窗的位置、为弹窗添加元素
查看>>
电路基础
查看>>