创造者模式

模式说明

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

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

和工厂方法很像,创造者是一个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._food
10     def getdrink(self):
11         return self._drink
12
13 class MealBuilder(object):
14     _meal = Meal()
15     def buildFood(self):
16         pass
17
18     def buildDrink(self):
19         pass
20
21     def getMeal(self):
22         return self.meal
23
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 = mealBuilder
41     def PrepareMeal(self):
42         self._mealuilder.buildDrink()
43         self._mealuilder.buildFood()
44         return self._mealuilder._meal
45
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

时间: 2024-11-05 19:44:57

创造者模式的相关文章

Atitit GRASP(General Responsibility Assignment Software Patterns),中文名称为“通用职责分配软件模式”

1. GRASP (职责分配原则)1 1.1. GRASP设计模式 1 1.2. 9个基本的OO设计原则或基本的设计构件.这9个设计模式分别是:创建者(Creator).信息专家(Information Expert).低耦合(Low Coupling).控制器(Controller).高内聚(High Cohesion).多态性(Polymorphism).纯虚构(Pure Fabrication).间接性(Indirection).防止变异(Protected Variations). 2

设计模式--建造者模式C++实现

建造者模式C++实现 1定义 将一个复杂对象的构建和他的表示分离,使得同样的构建过程可以创造不同的表示 注:在模板方法中,实现了父类调用子类方法的功能,且,通过钩子实现了方法的选择性调用.但是其中整体的顺序固定的,先做什么再做什么,不用做的通过钩子屏蔽. 而创造者模式就是对这个固定顺序进行调整使得其更好工作的一个模式. 2类图 角色分工: Product产品类,通过模板方法模式实现,有基本方法和模板方法 Builder抽象建造者,规范产品的组件,一般由子类实现 ConcreteBuilder具体

设计模式—建造者模式(Builder)

title: 设计模式-建造者模式 建造者模式(Builder)是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节.建造者模式属于对象创建型模式.我们获得一个对象的时候不是直接new这个对象出来,而是对其建造者进行属性设置,然后建造者在根据设置建造出各个对象出来.建造者模式又可以称为生成器模式. 模式结构 一个标准的建造者模式包含如下角色: Builder:抽象建造者 ConcreteBuilder:具体建造者 Director

设计模式(c#)代码总结

设计模式分为三种类型 创建型模式:简单工厂.工厂方法模式.抽象工厂模式.建造者模式.原型模式.单例模式 结构型模式:适配器模式.桥接模式.装饰模式.组合模式.外观模式.享元模式.代理模式. 行为型模式:模版方法模式.命令模式.迭代器模式.观察者模式.中介者模式.备忘录模式.解释器模式.状态模式.策略模式.职责链模式.访问者模式. 创建型模式 一.简单工厂模式 模式说明 简单工厂模式又称之为静态工厂方法,属于创建型模式.在简单工厂模式中,可以根据传递的参数不同,返回不同类的实例.简单工厂模式定义了

构造者设计模式

构造者模式又叫创造者模式,是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.创建者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加以抽象,通过子类继承或者重载的方式,动态的创建具有复合属性的对象. 这个说法有点官方,简单来说,有一个对象创建过程很复杂,我们采用构造者模式,可以将这个复杂的创建过程隐藏起来,而且可以通过构建者,来实现对象创建的多元化 举个例子,比如电脑的创建过程,需要创建CPU,硬盘,屏幕,主机,内存,适配器,键盘等等一系列小对象,最后才能构建出一

[转][osg]探究osg中的程序设计模式【目录】

作者:3wwang 原文接连:http://www.3wwang.cn/html/article_104.html 前序 探究osg中的程序设计模式---开篇 探究osg中的程序设计模式---创造性模式 探究osg中的程序设计模式---创造型模式---Factory(工厂)模式 探究osg中的程序设计模式---创造型模式---AbstractFactory(抽象工厂)模式 探究osg中的程序设计模式---创造型模式---Singleton(单例)模式 探究osg中的程序设计模式---创造型模式-

软件工程知识技能水平测试

软件工程知识技能水平测试 通过软件工程课程的学习,学生应掌握软件开发与维护的原则.技术及方法.软件项目的计划.组织及管理.以及如何用工程化的方法开发软件项目,在开发过程中应遵循的流程.准则.标准和规范. 一.软件工程知识技能水平高低的主要体现方面 开发环境的了解.掌握. 这方面包括一些常用开发工具的了解,以及linux系统的了解. 开发语言的掌握程度. 由于每个人偏好的开发语言不同,对这方面的考察应更侧重算法或数据结构的考察. 软件开发的流程 应了解掌握瀑布模型.敏捷开发等软件工程开发的流程.了

[转] 前后端分离开发模式的 mock 平台预研

引入 mock(模拟): 是在项目测试中,对项目外部或不容易获取的对象/接口,用一个虚拟的对象/接口来模拟,以便测试. 背景 前后端分离 前后端仅仅通过异步接口(AJAX/JSONP)来编程 前后端都各自有自己的开发流程,构建工具,测试集合 关注点分离,前后端变得相对独立并松耦合 开发流程 后台编写和维护接口文档,在 API 变化时更新接口文档 后台根据接口文档进行接口开发 前端根据接口文档进行开发 开发完成后联调和提交测试 面临问题 没有统一的文档编写规范,导致文档越来越乱,无法维护和阅读 开

模式和原则[转载]

设计模式介绍 模式:每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心. 这是关于模式最经典的定义,作者是建筑大师Christopher Alexander.如果是第一次看到这句话,多数人会觉得有些抽象难懂.其实"模式"两个字只是一个代号,就像我叫Justin,如果我改叫Tom也没什么问题,只是我更喜欢Justin这个名字,所以从Christopher开始,有了"模式"这个词,人们也都把关于"重复发生的问题的描述和解决办法&quo