13 大话设计模式C++实现之建造者模式

例子说明1:炒菜没放盐和肯德基的标准化

例子说明2:画一个不同形态的小人(高矮胖瘦各不同)

/*
建造者模式(生成器模式):
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
建造者模式可以将一个产品的内部表象与产品的生成过程分隔开来,从而可以使一个建造过程生成具有不同的内部表象的产品。
如果我们使用了建造者模式,那么用户就只需要指定需要建造的类型就可以得到他们,而且具体的建造过程不需要知道
*/
#include<iostream>
#include<string>
#include<list>

using namespace std;


//产品类,由多个部件构成
class Product
{
private:
    list<string> *parts = new list<string>();
public:
    Product()
    {
    
    }
    void Add(string part)
    {
        parts->push_back(part);
    }
    void Show()
    {
        cout << "\n 产品 创建--------" << endl;
        for (auto e : (*parts))
        {
            cout << e << endl;
        }
    }

    ~Product()
    {
        if (parts != NULL)
        {
            delete parts;
            parts = NULL;
        }
    }
};

//Builder类,抽象建造者类,确定由两个部件PartA和PartB组成并声明一个得到产品建造后结果的方法
/*
抽象类用来规定某个产品的必要组成部分,就像做菜必须要放盐,放酱油等等,画人必须要有头脚手躯干。
*/
class Builder
{
public:
    virtual void BuildPartA() = 0;
    virtual void BuildPartB() = 0;
    virtual Product& GetReult() = 0;
};

//具体建造者类,画一个胖子或者瘦子,加一勺盐两勺盐等过程的具体实现
class ConcreteBuilder1 : public Builder
{
private:
    Product *product = new Product();
public:
    virtual void BuildPartA()
    {
        product->Add("部件A");
    }
    virtual void BuildPartB()
    {
        product->Add("部件B");
    }
    virtual Product& GetReult()
    {
        return *product;
    }
};

class ConcreteBuilder2 : public Builder
{
private:
    Product *product = new Product();
public:
    virtual void BuildPartA()
    {
        product->Add("部件X");
    }
    virtual void BuildPartB()
    {
        product->Add("部件Y");
    }
    virtual Product& GetReult()
    {
        return *product;
    }
};

//指挥者类
class Director
{
public:
    //用于控制具体构建哪些模块或者实现哪些步骤
    void Construct(Builder* builder)
    {
        builder->BuildPartA();
        builder->BuildPartB();
    }
};

void Client()
{
    //客户端不需要知道具体的建造过程,仅需要通过指挥者对象控制具体的构建内容
    Director *director = new Director();
    Builder *b1 = new ConcreteBuilder1();
    Builder *b2 = new ConcreteBuilder2();

    director->Construct(b1);
    Product p1 = b1->GetReult();
    p1.Show();

    director->Construct(b2);
    Product p2 = b2->GetReult();
    p2.Show();

    if (director != NULL)
    {
        delete director;
        director = NULL;
    }
    if (b1 != NULL)
    {
        delete b1;
        b1 = NULL;
    }
    if (b2 = NULL)
    {
        delete b2;
        b2 = NULL;
    }
}

int main()
{
    Client();
    system("pause");
    return 0;
}

运行结果:


 产品 创建--------
部件A
部件B

 产品 创建--------
部件X
部件Y
请按任意键继续. . .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目 录 序言 前言 读者指南 第 1 章 引言 1 1.1 什么是设计模式 2 1.2 Smalltalk MVC 中的设计模式 3 1.3 描述设计模式 4 1.4 设计模式的编目 5 1.5 组织编目 7 1.6 设计模式怎样解决设计问题 8 1.6.1 寻找合适的对象 8 1.6.2 决定对象的粒度 9 1.6.3 指定对象接口 9 1.6.4 描述对象的实现 10 1.6.5 运用复用机制 13 1.6.6 关联运行时刻和编译时刻的结构 15 1.6.7 设计应支持变化 16 1.7 怎样选择设计模式 19 1.8 怎样使用设计模式 20 第 2 章 实例研究:设计一个文档编辑器 22 2.1 设计问题 23 2.2 文档结构 23 2.2.1 递归组合 24 2.2.2 图元 25 2.2.3 组合模式 272.3 格式化 27 2.3.1 封装格式化算法 27 2.3.2 Compositor 和 Composition 27 2.3.3 策略模式 29 2.4 修饰用户界面 29 2.4.1 透明围栏 29 2.4.2 Monoglyph 30 2.4.3 Decorator 模式 32 2.5 支持多种视感标准 32 2.5.1 对象创建的抽象 32 2.5.2 工厂类和产品类 33 2.5.3 Abstract Factory 模式 35 2.6 支持多种窗口系统 35 2.6.1 我们是否可以使用 Abstract Factory 模式 35 2.6.2 封装实现依赖关系 35 2.6.3 Window 和 WindowImp 37 2.6.4 Bridge 模式 40 2.7 用户操作 40 2.7.1 封装一个请求 41 2.7.2 Command 类及其子类 41 2.7.3 撤消和重做 42 2.7.4 命令历史记录 42 2.7.5 Command 模式 44 2.8 拼写检查和断字处理 44 2.8.1 访问分散的信息 44 2.8.2 封装访问和遍历 45 2.8.3 Iterator 类及其子类 46 2.8.4 Iterator 模式 48 2.8.5 遍历和遍历过程中的动作 48 2.8.6 封装分析 48 2.8.7 Visitor 类及其子类 51 2.8.8 Visitor 模式 52 2.9 小结 53 第 3 章 创建型模式 54 3.1 Abstract Factory(抽象工厂)—对象创建型模式 57 3.2 Builder(生成器)—对象创建型模式 633.3 Factory Method(工厂方法)—对象创建型模式 70 3.4 Prototype(原型)—对象创建型模式 87 3.5 Singleton(单件)—对象创建型模式 84 3.6 创建型模式的讨论 89 第 4 章 结构型模式 91 4.1 Adapter(适配器)—类对象结构型模式 92 4.2 Bridge(桥接)—对象结构型模式 100 4.3 Composite(组成)—对象结构型模式 107 4.4 Decorator(装饰)—对象结构型模式 115 4.5 FACADE(外观)—对象结构型模式 121 4.6 Flyweight(享元)—对象结构型模式 128 4.7 Proxy(代理)—对象结构型模式 137 4.8 结构型模式的讨论 144 4.8.1 Adapter 与 Bridge 144 4.8.2 Composite、 Decorator 与 Proxy 145 第 5 章 行为模式 147 5.1 CHAIN OF RESPONSIBIL ITY(职责链)—对象行为型模式 147 5.2 COMMAND(命令)—对象行为型模式 154 5.3 INTERPRETER(解释器)—类行为型模式 162 5.4 ITERATOR(迭代器)—对象行为型模式 171 5.5 MEDIATOR(中介者)—对象行为型模式 181 5.6 MEMENTO(备忘录)—对象行为型模式 188 5.7 OBSERVER(观察者)—对象行为型模式 194 5.8 STATE(状态)—对象行为型模式 201 5.9 STRATEGY(策略)—对象行为型模式 208 5.10 TEMPLATE METHOD(模板方法)—类行为型模式 214 5.11 VISITOR(访问者)—对象行为型模式 218 5.12 行为模式的讨论 228 5.12 1 封装变化 228 5.12.2 对象作为参数 228 5.12.3 通信应该被封装还是被分布 229 5.12.4 对发送者和接收者解耦 229 5.12.5 总结 231 第 6 章 结论 232 6.1 设计模式将带来什么 2326.2 一套通用的设计词汇 23

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值