文档章节

建造者模式

大大美女女
 大大美女女
发布于 2014/08/27 14:11
字数 284
阅读 87
收藏 5

建造者模式和工厂模式稍微有点像,但是建造者模式更适用与遵循一定的规则进行创建。例如,和美女乱搞,都要经过脱鞋,脱裤子,脱上衣这些流程,但是每个人脱的方式不一样,脱得顺序也不一样,适用于建造者模式。

代码如下:

#include <iostream>

using namespace std;
class Builder {
  public:
    Builder() {}
    virtual ~Builder() {}
  private:
    Builder(const Builder& build);
    Builder& operator = (const Builder& build);
  public:
    virtual void Create() = 0;
    virtual void OffShone() = 0;
    virtual void OffJacket() = 0;
    virtual void OffPants() = 0;
};
class BuilderA : public Builder {
  public:
    BuilderA() {}
    ~BuilderA() {}
  private:
    BuilderA(const BuilderA& build);
    BuilderA& operator = (const BuilderA& build);
  public:
    void OffShone() {
      cout<< "A offshone" << endl;
    }
    void OffJacket() {
      cout << "A offjacket" << endl;
    }
    void OffPants() {
      cout<< "A offpants" << endl;
    }
    void Create() {
      OffPants();
      OffShone();
      OffJacket();
    }
};
class BuilderB : public Builder {
  public:
    BuilderB() {}
    ~BuilderB() {}
  private:
    BuilderB(const BuilderB& build);
    BuilderB& operator = (const BuilderB& build);
  public:
    void OffShone() {
      cout<< "B offshone" << endl;
    }
    void OffJacket() {
      cout << "B offjacket" << endl;
    }
    void OffPants() {
      cout<< "B offpants" << endl;
    }
    void Create() {
      OffShone();
      OffPants();
      OffJacket();
    }
};
class Director {
  public:
    Director(Builder* build) {
      build_ = build;
    }
    ~Director() {
      if (build_) {
        delete build_;
        build_ = NULL;
      }
    }
  private:
    Director(const Director& d);
    Director& operator = (const Director& d);
  public:
    void Create() {
      build_->Create();
    }
  private:
    Builder* build_;
};

#include "main.h"

int main(int argc, char* argv[]) {
  Builder* build_a = new BuilderA();  
  Builder* build_b = new BuilderB();  
  Director* derector_a = new Director(build_a);
  Director* derector_b = new Director(build_b);
  derector_a->Create();
  derector_b->Create();
  
  delete derector_a;
  delete derector_b;
}

© 著作权归作者所有

上一篇: 原型模式
下一篇: 抽象工厂模式
大大美女女
粉丝 18
博文 60
码字总数 24479
作品 0
昌平
程序员
私信 提问
加载中

评论(1)

Micooz
Micooz
看起来很冗余,有几个问题,类似于工厂模式,create方法从语义上理解应该是返回目标对象并在创造者内部进行内存管理,同时避免使用指针,而不是仅仅执行各自的成员函数,另外,两个Director对象都没有delete,个人意见如此。
我的Java设计模式-建造者模式

在未上大学之前,一直有个梦想“I have a dream!”,就是能成为一位汽车工程师,一直幻想着开着自己设计的汽车飞奔在公路上,迷倒了万千少女。咳咳~~虽然现在没实现我的dream,但梦想还是得有...

Jet啟思
2017/10/11
0
0
设计模式之禅之设计模式-建造者模式

一:建造者模式的定义 --->建造者模式(Builder Pattern)也叫做生成器模式,其定义如下:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 ● Product产品类 通常是实...

无信不立
2016/01/04
0
0
python设计模式-建造者模式

在上一篇python设计模式:抽象工厂模式中,我们尝试用抽象工厂模式规范化了 Pizza 原材料的供应以及 Pizza 的创建。但是我们忽略了一个问题,那就是每种 Pizza 的烘焙时间依赖于生面团的厚度...

goodspeed
2017/11/12
0
0
人人都会设计模式---建造者模式--Builder

PS:转载请注明出处 作者: TigerChain 地址: www.jianshu.com/p/300cbb9ee… 本文出自 TigerChain 简书 人人都会设计模式 教程简介 1、阅读对象 本篇教程适合新手阅读,老手直接略过 2、教程...

TigerChain
2017/12/03
0
0
07、建造者模式--Builder

本节课程大纲 PS:转载请注明出处 作者: TigerChain 地址: http://www.jianshu.com/p/300cbb9ee7f2 本文出自 TigerChain 简书 人人都会设计模式 教程简介 1、阅读对象 本篇教程适合新手阅读,...

TigerChain
2017/12/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Java常见异常处理

异常是Java程序中经常遇到的问题,一个异常就是一个Bug,就要花很多时间来定位异常。 Java异常 (1)Throwable是Java异常的顶级类,所有的异常都继承于这个类。 (2)Error,Exception是异常...

daxiongdi
19分钟前
3
0
Validator 常用注解

说明 Validator主要是校验用户提交的数据的合理性的,比如是否为空了,密码长度是否大于6位,是否是纯数字的,等等。那么在spring boot怎么使用这么强大的校验框架呢。 常用 [@null](https:...

五彩的颜色
28分钟前
2
0
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。

#1 先把入栈顺序的第一数据入栈, #2 if 入栈的数据==等于出栈的数据,就循环一次看是否新建的栈的数据是否出栈 #3 返回新建的栈是否为空,就是要的结果 public class Solution { public boo...

winkwink
34分钟前
2
0
《JAVA核心知识》学习笔记 (19. 数据库)

19.1.1. 存储引擎 19.1.1.1. 概念 数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、 更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧...

Shingfi
40分钟前
4
0
三分钟手操自己的yum源

本文章原创首发公众号:编程三分钟 上次就想手操yum源了,考虑到有的朋友没接触过,直接写成了yum源的科普,活活憋了我一个星期,现在我们快快开始。 什么情况下我们需要搭建一个仓库呢? 记...

编程三分钟
44分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部