《大话设计模式》c++实现 建造者模式

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

角色:

(1)Builder:是为创建一个Product对象的各个部件指定的抽象接口。

(2)ConcreteBuilder:是具体创建者,实现Builder接口,构造和装配各个部件。

(3)Product:具体的产品角色。

(4)Director:指挥者,他是构建一个使用Builder接口的对象。

Q:什么时候使用建造者模式?

A:它主要是用于创建一些复杂的对象,这些对象内部构造间的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。

Q:使用建造者模式的好处?

A:建造者模式的好处就是使得建造代码与表示代码分离,由于建造者隐藏了 该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了。

  1 #include<string>
  2 #include<vector>
  3 #include<iostream>
  4
  5 class Product{
  6 private:
  7     std::vector<std::string>  parts;
  8 public:
  9     void Add(std::string part){
 10         parts.push_back(part);
 11     }
 12     void Show(){
 13     std::cout << "product building------------" << std::endl;
 14     std::vector<std::string>::iterator it;
 15     for (it = parts.begin(); it != parts.end(); it++){
 16         std::cout << *it << std::endl;
 17     }
 18
 19     }
 20 };
 21
 22 class Builder
 23 {
 24 public:
 25     virtual void BuildPartA() = 0;
 26     virtual void BuildPartB() = 0;
 27     virtual Product* GetResult() = 0;
 28
 29
 30 };
 31
 32
 33 class ConcreteBulider1:public Builder
 34 {
 35 private:
 36     Product* product;
 37
 38 public:
 39     ConcreteBulider1(){
 40         product = new Product();
 41
 42     }
 43     ~ConcreteBulider1(){
 44         delete product;
 45     }
 46     void BuildPartA(){
 47         product->Add("part A");
 48     }
 49     void BuildPartB(){
 50         product->Add("part B");
 51     }
 52     Product* GetResult(){
 53         return product;
 54     }
 55
 56 };
 57
 58 class ConcreteBulider2 :public Builder
 59 {
 60 private:
 61     Product* product;
 62
 63
 64 public:
 65     ConcreteBulider2(){
 66         product = new Product();
 67
 68     }
 69     ~ConcreteBulider2(){
 70         delete product;
 71     }
 72     void BuildPartA(){
 73         product->Add("part X");
 74     }
 75     void BuildPartB(){
 76         product->Add("part Y");
 77     }
 78     Product* GetResult(){
 79         return product;
 80     }
 81
 82 };
 83
 84 class Director
 85 {
 86 public:
 87     void Construct(Builder* builder){
 88         builder->BuildPartA();
 89         builder->BuildPartB();
 90     }
 91 };
 92
 93
 94 //Client,客户不知道具体的建造过程。
 95 void main()
 96 {
 97     Director* director = new Director();
 98
 99     Builder* builder1 = new ConcreteBulider1();
100     Builder* builder2 = new ConcreteBulider2();
101
102     std::cout << "指挥者用ConcreteBuilder1的方法建造产品:" << std::endl;
103     director->Construct(builder1);
104     Product* p1 = builder1->GetResult();
105     p1->Show();
106     std::cout << std::endl;
107
108     std::cout << "指挥者用ConcreteBuilder2的方法建造产品:" << std::endl;
109     director->Construct(builder2);
110     Product* p2 = builder2->GetResult();
111     p2->Show();
112     std::cout << std::endl;
113
114     delete director;
115     delete builder1;
116     delete builder2;
117
118     system("pause");
119 }

参考:

https://blog.csdn.net/xiqingnian/article/details/42005627

原文地址:https://www.cnblogs.com/zle1992/p/10127200.html

时间: 2024-10-08 07:31:58

《大话设计模式》c++实现 建造者模式的相关文章

大话设计模式C++版——建造者模式

日常做菜的过程中,经常会有忘记放盐或者放2次盐的经历,最后导致好好的一盘菜让大家无从下口.这个时候就需要用到建造者模式来规范炒菜的过程,来保证每一道菜都会经历加油.放食物.放盐.放味精这4道基本的工序,同时保证每道工序不会重复. 1.炒菜基类 class CCook { public: CCook() {} virtual ~CCook() {} //建造过程函数 //为了保证所有的子类能够按照指定顺序依次实现完整的建造过程,而不会忘记某一个过程的调用(如忘了放盐) void Cook() {

大话设计模式_简单工厂模式(Java代码)

简单的描述:一个父类.多个子类,实例化那个子类由一个单独的工厂类来进行 图片摘自大话设计模式: 运算类: 1 package com.longsheng.simpleFactory; 2 3 public class Calculate { 4 5 private double firstNum; 6 private double secondNum; 7 8 public double getFirstNum() { 9 return firstNum; 10 } 11 12 public v

大话设计模式_抽象工厂模式(Java代码)

抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类. 简单描述:有多种抽象产品,并且每种抽象产品都有多个具体产品.一个抽象工厂,提供多个具体工厂,每个工厂则提供不同种类的具体产品. 大话设计模式中的截图: 例子代码: AbstractProductA类: 1 package com.longsheng.abstractfactory; 2 3 public abstract class AbstractProductA { 4 5 public abstract v

大话设计模式之简单工厂模式&amp;工厂方法模式&amp;抽象工厂模式

创造类模式分为三种:简单工厂模式,工厂模式和抽象工厂模式. 定义: 简单工厂模式:用一个单独的类来做创造实例的过程. 工厂模式:一个用于创建对象的接口,让子类决定实例化哪一个类,讲一个类的实例化 延迟到其子类. 抽象工厂模式:为创建一组相关或相互依赖的对象的类,而不指定具体类. 结构图: 这是简单工厂的结构图,从图中就很好理解. 简单工厂的优点: 根据用户需要,new出需要的对象. 但是简单工厂弊端: 当新加入一个功能是,就要修改工厂.这个时候,就需要工厂模式了. 从图中我们可以看出: 工厂模式

学习大话设计模式01_简单工厂模式(简易计算器)

1 /** 2 * 面向对象(运算类) 3 * 简易计算器 4 * @author Monica 5 * 6 */ 7 public class Operation { 8 private double numberA = 0; 9 private double numberB = 0; 10 11 //虚函数 12 public double GetResult() { 13 double result = 0; 14 return result; 15 } 16 17 public doub

【大话设计模式】—— 工厂方法模式

一.概念 想象一下我们的寻常见到的工厂,下一个订单,付了订金,一段时间后就能够提货.我们不须要知道工厂是用的什么机器,怎么安排工人的,从哪来的材料,只须要一个订单就好,工厂就能够依照其固定流水线做出我们所须要的产品.设计模式中也有类似的一个大神:工厂方法模式. 以下让我们来认识一下: 工厂方法模式(Factory Method):定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 二.UML图 Product(抽象产品) ConcreteProduct(

设计模式学习04—建造者模式

一.动机与定义 创建对象时,我们知道可以使用工厂方式来创建,使调用者和具体实现解耦,但是有一种情况,当要创建的多个对象之间重复性较大,只有创建步骤.组装顺序或者内部构件不同时,工厂模式就需要进一步的演化了,如我们去KFC,有很多种套餐,比如套餐1(薯条+可乐+汉堡),套餐2(鸡肉卷+薯条+可乐),这个套餐就是我们要获取的复杂对象,那么程序如何创建出这种对象呢. 我们看到套餐的内容很多是一样的,那么我们是不是可以考虑将创建单个食品(如鸡肉卷.可乐等)方法提取出来,使用单独一个类协调这些食品的组合比

设计模式--17、建造者模式

[转]建造者模式 一个人活到70岁以上,都会经历这样的几个阶段:婴儿,少年,青年,中年,老年.并且每个人在各个阶段肯定是不一样的呀,我觉得可以说世界上不存在两个人在人生的这5个阶段的生活完全一样,但是活到70岁以上的人,都经历了这几个阶段是肯定的.实际上这是一个比较经典的建造者模式的例子了. 1.初识建造者模式 建造者模式实际上是常用的设计模式.顾名思义,builder的意思是建造者或者建筑工人,谈到建造自然会想到楼房.楼房是千差万别的,楼房的外形.层数.内部房间的数量.房间的装饰等等都不一样,

设计模式学习笔记-建造者模式

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

大话设计模式之简单工厂模式

简单工厂模式 最近朋友推荐了一本书<大话设计模式>,此书刚刚到,博主也还没开始看,希望以博文的方式与大家一起分享,一起学习. 简单工厂模式,也就是说,到底要实列化谁,将来会不会增加实列化的对象,比如增加开根运算,这是很容易实列化的地方应该考虑用一个单独的类来做这个创造实列的过程,这就是工厂,来我们一起看看这个类如何写. 简单运算工厂类: import public public class OperationFactory { public static OperationFactory(st