3,建造者模式(Builder Pattern)

Builder模式  是一种对象创建型模式之一,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象。

创建的是一个复合对象:被创建的对象为一个具有复合属性的复合对象- 关注对象创建的各部分的创建过程

  适用情况:一个对象的构建比较复杂,将一个对象的构建(?)和对象的表示(?)进行分离。

1) Builder:为创建产品各个部分,统一抽象接口。

2) ConcreteBuilder:具体的创建产品的各个部分,部分A, 部分B,部分C。

3) Director:构造一个使用Builder接口的对象。

4) Product:表示被构造的复杂对象。

ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。

创建者模式和工厂模式的区别

Factory模式中:

1、有一个抽象的工厂。

2、实现一个具体的工厂---汽车工厂。

3、工厂生产汽车A,得到汽车产品A。

4、工厂生产汽车B,得到汽车产品B。

这样做,实现了购买者和生产线的隔离。强调的是结果

Builder模式:

1、引擎工厂生产引擎产品,得到汽车部件A。

2、轮胎工厂生产轮子产品,得到汽车部件B。

3、底盘工厂生产车身产品,得到汽车部件C。

4、将这些部件放到一起,形成刚好能够组装成一辆汽车的整体。

5、将这个整体送到汽车组装工厂,得到一个汽车产品。

这样做,目的是为了实现复杂对象生产线和其部件的解耦。强调的是过程

两者的区别在于:

  Factory模式不考虑对象的组装过程,而直接生成一个我想要的对象。  Factory模式所解决的问题是,工厂生产产品。

Builder模式先一个个的创建对象的每一个部件,再统一组装成一个对象。Builder模式所解决的问题是工厂控制产品生成器组装各个部件的过程,然后从产品生成器中得到产品。

Builder模式不是很常用。模式本身就是一种思想。知道了就可以了。

设计模式就是一种思想。学习一个模式,花上一两个小时把此模式的意思理解了,就 够了。其精华的所在会在以后工作的设计中逐渐体现出来。

  1 #include <iostream>
  2 using namespace std;
  3
  4 #include "string"
  5 //房子 只有get set 接口
  6 class House
  7 {
  8 public:
  9     void setDoor(string door)
 10     {
 11         this->m_door = door;
 12     }
 13
 14     void setWall(string wall)
 15     {
 16         this->m_wall = wall;
 17     }
 18     void setWindow(string window)
 19     {
 20         this->m_window = window;
 21     }
 22
 23     //--
 24     string getDoor( )
 25     {
 26         cout << m_door << endl;
 27         return this->m_door ;
 28     }
 29
 30     string getWall()
 31     {
 32         cout << m_wall << endl;
 33         return this->m_wall;
 34     }
 35     string getWindow()
 36     {
 37         cout << m_window << endl;
 38         return m_window;
 39     }
 40
 41 private:
 42     string    m_door;
 43     string    m_wall;
 44     string    m_window;
 45 };
 46 //工程队 虚父类
 47 class  Builder
 48 {
 49 public:
 50     virtual void buildWall() = 0;
 51     virtual void buildDoor() = 0;
 52     virtual void buildWindow() = 0;
 53     virtual House* getHouse() = 0;
 54 };
 55
 56 //公寓工程队
 57 class  FlatBuilder : public Builder
 58 {
 59 public:
 60     FlatBuilder()
 61     {
 62         m_house = new House;
 63     }
 64     virtual void buildWall()
 65     {
 66         m_house->setWall(" flat wall");
 67     }
 68
 69     virtual void buildDoor()
 70     {
 71         m_house->setDoor("flat door");
 72     }
 73
 74     virtual void buildWindow()
 75     {
 76         m_house->setWindow("flat window");
 77     }
 78
 79     virtual House* getHouse()
 80     {
 81         return m_house;
 82     }
 83 private:
 84     House *m_house;
 85 };
 86
 87 //别墅 villa 工程队
 88 class  VillaBuilder : public Builder
 89 {
 90 public:
 91     VillaBuilder()
 92     {
 93         m_house = new House;
 94     }
 95     virtual void buildWall()
 96     {
 97         m_house->setWall(" villa wall");
 98     }
 99
100     virtual void buildDoor()
101     {
102         m_house->setDoor("villa door");
103     }
104
105     virtual void buildWindow()
106     {
107         m_house->setWindow("villa window");
108     }
109
110     virtual House* getHouse()
111     {
112         return m_house;
113     }
114 private:
115     House *m_house;
116 };
117
118 //设计师(指挥者) 负责建造逻辑
119 //建筑队 干具体的活
120 class Director
121 {
122 public:
123     Director( Builder * build)
124     {
125         m_build = build;
126     }
127     void Construct()
128     {
129         m_build->buildWall();
130         m_build->buildWindow();
131         m_build->buildDoor();
132     }
133 private:
134      Builder * m_build;
135 };
136
137
138 void main()
139 {
140     House        *house  = NULL;
141     Builder        *builder = NULL;
142     Director    *director = NULL;
143
144     // 请一个建造别墅的工程队
145     builder = new VillaBuilder;
146
147     //设计师 指挥 工程队 干活
148     director = new Director(builder);
149     director->Construct();
150     house  =  builder->getHouse();
151     house->getWindow();
152     house->getDoor();
153
154     delete house;
155     delete builder;
156
157     //请 FlatBuilder 公寓
158     builder = new FlatBuilder;
159     director = new Director(builder);
160     director->Construct();
161     house  =  builder->getHouse();
162     house->getWindow();
163     house->getDoor();
164     delete house;
165     delete builder;
166
167
168     delete director;
169     system("pause");
170     return ;
171 }
时间: 2024-08-23 22:54:12

3,建造者模式(Builder Pattern)的相关文章

建造者模式(Builder Pattern)

模式定义 造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. UML类图 Builder:抽象建造者 ConcreteBuilder:具体建造者 Director:指挥者 Product:产品角色 代码结构 public static class BuilderApp { public static void Run() { Director director = new Director(); Builder b1 = new

23种设计模式--建造者模式-Builder Pattern

一.建造模式的介绍       建造者模式就是将零件组装成一个整体,用官方一点的话来讲就是将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示.生活中比如说组装电脑,汽车等等这些都是建造者模式的具体体现,组装电脑反应到软件上就是一个复杂的对象,然后我们使用建造者模式的时候需要抽象一个建造类,抽象一个指挥者指挥具体实现的那个类,然后就是具体实现这个对象的类,这样就避免了每新创建一个不同的复杂对象就需要重新写一下这个类,这样就只要重写建造者就可以了,我们接下来就用组装电脑这个来说明一

5.建造者模式(Builder Pattern)

using System; using System.Collections.Generic; namespace ConsoleApplication4 { class Program { /// <summary> /// 以组装电脑为例子 /// 每台电脑的组成过程都是一致的,但是使用同样的构建过程可以创建不同的表示(即可以组装成不一样的电脑,配置不一样) /// 组装电脑的这个场景就可以应用建造者模式来设计 /// </summary> /// <param name

设计模式(创建型)之建造者模式(Builder Pattern)

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! 概述 建造者模式将客户端与包含多个组成部分的复杂对象的创建过程分离,客户端压根不用知道复杂对象的内部组成部分与装配方式,只需要知道所需建造者的类型即可.它关注如何一步一步创建一个的复杂对象,不同的具体建造者定义了不同的创建过程,且具体建造者相互独立,增加新的建造者非常方便,无须修改已有代码,系统具有较好的扩展性. 问题来了... 你可能会有疑惑,建造者模式和抽象工

Java之建造者模式(Builder Pattern)(转)

1.概念 将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示. [构建与表示分离,同构建不同表示] 与抽象工厂的区别:在建造者模式里,有个指导者,由指导者来管理建造者,用户是与指导者联系的,指导者联系建造者最后得到产品.即建造模式可以强制实行一种分步骤进行的建造过程. 建造模式是将复杂的内部创建封装在内部,对于外部调用的人来说,只需要传入建造者和建造工具,对于内部是如何建造成成品的,调用者无需关心. 举个简单的例子,如汽车,有很多部件,车轮,方向盘,发动机还有各种小零件等等,部

建造者模式&lt;Builder&gt;

概述 将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式 角色 建造者(Builder):为创建一个产品对象的各个部件指定抽象接口. 具体建造者(ConcreteBuilder):实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并 提供一个检索产品的接口 产品(Product):表示被构造的复杂对象.ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最

建造者模式(Builder)——从组装电脑开始

建造者模式(Builder)--从组装电脑开始 建造者模式概括起来就是将不同独立的组件按照一定的条件组合起来构成一个相对业务完整的对象.调用者无需知道构造的过程. 我们从组装电脑开始 让我们从买组装电脑开始吧. 首先要买一个电脑,一般都有两个选择 -- 品牌电脑和组装电脑,一般人为了省事和放心都会选择买品牌电脑(也就是整机).在这里,为了更好的分析问题,假定我们为了性价比决定要买组装电脑.那么我们该怎么做呢. 首先我们得学习一个完整的电脑的组成部分有哪些? 经过翻查一部分资料发现,主要部件分为主

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

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

设计模式之七:建造模式(Builder Pattern)

建造者模式就是将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示. 适用范围: 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时. 当构造过程必须允许被构造的对象有不同表示时. 建造者模式里面有四个角色: Builder: 给出一个抽象接口,以规范产品对象的各个组成部分的建造.一般而言,此接口独立于应用程序的业务逻辑.模式中直接创建产品对象的具体创建者角色.具体创建者角色必须实现这个接口的所有方法:一个是建造方法,另一个是结果返还方法. ConcreteBu

生成器模式(Builder Pattern)

一. 建造者(Builder)模式 建造者模式可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象. 对象性质的建造 有些情况下,一个对象会有一些重要的性质,在它们没有恰当的值之前,对象不能作为一个完整的产品使用.比如,一个电子邮件有发件人地址.收件人地址.主题.内容.附录等部分,而在最起码的收件人地址未被赋值之前,这个电子邮件不能发出. 有些情况下,一个对象的一些性质必须按照某个顺序赋值才有意义.在某个性质没有赋值之前,另一个性质则无法赋值.