建造者模式C++实现

1定义

将一个复杂对象的构建和他的表示分离,使得同样的构建过程可以创造不同的表示

注:在模板方法中,实现了父类调用子类方法的功能,且,通过钩子实现了方法的选择性调用。但是其中整体的顺序固定的,先做什么再做什么,不用做的通过钩子屏蔽。

而创造者模式就是对这个固定顺序进行调整使得其更好工作的一个模式。

2类图

角色分工:

Product产品类,通过模板方法模式实现,有基本方法和模板方法

Builder抽象建造者,规范产品的组件,一般由子类实现

ConcreteBuilder具体建造者,实现抽象类定义的所有方法,并返回一个创建好的对象

Director导演类,负责安排已有模块的顺序,然后告诉建造者开始建造

3实现

class Product

{

public:

  Product();

  ~Product();

private:
  string ProductPartA;
  string ProductPartB;
  string ProductPartC;

};

class Builder

{

public:

  virtual ~Builder();
  virtual void BuildPartA()=0;
  virtual void BuildPartB()=0;
  virtual void BuildPartC()=0;

  virtual Product* GetProduct() = 0;

protected:

  Builder();

private:

  Product* _pro;

};

class ConcreteBuilder:public  Builder

{

public:
  ConcreteBuilder();
  ~ConcreteBuilder();

  void BuildPartA();

  void BuildPartB();
  void BuildPartC();

  Product* GetProduct();

};

class Director

{

public:

  Director(Builder* bld);

  ~Director();

  void Construct()

  {
    _bld->BuildPartA();
    _bld->BuildPartB();
    _bld->BuildPartC();

    _bld->GetProduct();

  }

protected:

private:

  Builder* _bld;

};

3应用

①优点

封装性

建造者独立,容易扩展--》就是这个所谓不同的顺序的具体描述了

便于控制细节风险,细节问题封装在建造者中,所以互不影响

②使用场景

相同方法,不同顺序

多个部件可以组装,但是产生的结果不同时

产品类非常复杂或者调用顺序不同,产生的功能不同

对象创建过程中会使用到的系统中的其他对象时,这些对象在产品对象的创建过程不易得到时,可以采用建造者模式疯长该对象的创建过程。这是一个补偿方法。

③注意事项

建造者模式关注的是零件类型和装配工艺(顺序),这是他和工厂模式最大的不同。模板方法侧重子类控制父类

4扩展

在建造者模式中使用模板方法。就是前面已经用过的

建造者模式最主要的功能是基本方法的调用顺序安排,组装已有零件;而工厂模式则是造轮子。

设计模式--建造者模式C++实现的更多相关文章

  1. 3.java设计模式-建造者模式

    Java设计模式-建造者模式 在<JAVA与模式>一书中开头是这样描述建造(Builder)模式的: 建造模式是对象的创建模式.建造模式可以将一个产品的内部表象(internal repr ...

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

    title: 设计模式-建造者模式 建造者模式(Builder)是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节.建造者模式属于对 ...

  3. C#设计模式-建造者模式

    在软件系统中,有时需要创建一个复杂对象,并且这个复杂对象由其各部分子对象通过一定的步骤组合而成. 例如一个采购系统中,如果需要采购员去采购一批电脑时,在这个实际需求中,电脑就是一个复杂的对象,它是由C ...

  4. [Head First设计模式]山西面馆中的设计模式——建造者模式

    系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 引言 将学习融入生活中,是件很happy的事情,不会感 ...

  5. 说说设计模式~建造者模式(Builder)

    返回目录 建造者模式是我的"设计模式"里创建型模式里的最后一篇,这种模式在实现中,很多架构都用到了,如MVC,MVP,MVVM,它们都是有建造者模式的精髓的,即,创建与表现分享,我 ...

  6. C++设计模式——建造者模式

    建造者模式 在GOF的<设计模式 可复用面向对象软件的基础>中是这样说的:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 这句话,似懂非懂的.一个复杂对象的创建 ...

  7. Python设计模式——建造者模式

    需求,画人物,要求画一个人的头,左手,右手,左脚,右脚和身体,画一个瘦子,一个胖子 不使用设计模式 #encoding=utf-8 __author__ = 'kevinlu1010@qq.com' ...

  8. 我的Java设计模式-建造者模式

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

  9. 设计模式 | 建造者模式/生成器模式(builder)

    定义: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 结构:(书中图,侵删) 一个产品类 一个指定产品各个部件的抽象创建接口 若干个实现了各个部件的具体实现的创建类 一个 ...

  10. java设计模式——建造者模式

    一. 定义与类型 定义:将一个复杂对象的构建与它的表示分离,使用同样的构建过程可以创建不同的表示 用户只需制定需要建造的类型就可以得到它们,建造过程以及细节不需要知道 类型:创建型 建造者模式与工厂模 ...

随机推荐

  1. IBM Java 7 新特性和在 WAS 8.5 中的配置【转载】

    IBM Java 7新特性以及在WAS V8.5 中的安装与版本切换 简介: 本文介绍了 IBM Java 7 的基本新特性以及 IBM 特有的新特性,并详细的介绍和分析了 JVM 所采用的新的垃圾回 ...

  2. MapReduce Unit Test

    以前用java写MR程序总不习惯写单元测试,就是查错也只是在小规模数据上跑一下程序.昨天工作时,遇到一个bug,查了好久也查出来.估计是业务逻辑上的错误.后来没办法,只好写了个单元测试,一步步跟踪,瞬 ...

  3. bit,byte,char,位,字节,字符 的区别

    bit,byte,char,位,字节,字符 的区别 原创文章,未经作者允许,禁止转载!!!

  4. idea构建一个简单的maven_web项目

    软件说明 好啦,开始创建mave的web项目啦!

  5. 2016-2017 National Taiwan University World Final Team Selection Contest A - Hacker Cups and Balls

    题目: Dreamoon likes algorithm competitions very much. But when he feels crazy because he cannot figur ...

  6. 金融 贷款类 App 审核被拒 4.3 1.2 2.1 4.2.2 问题总结

    辛辛苦苦搞了一两个月,开发测试修bug,一路艰辛,到了审核这最后一关,各位同仁,咬紧牙关!接下来是鄙人遇到过的被拒问题,望能帮到诸君! ******************************** ...

  7. python在CentOS 7中的安装

    CentOS 7 中默认安装了python2.7.5,可能部分开发人员需要使用python3系列的产品,因为版本不“向下”兼容,诸如print函数,因此需要对于不同的项目进行python版本之间的切换 ...

  8. js 空数组 空对象判断

    js 空数组是true还是false   1 2 var arr = new Array(); // 或 var arr = []; 我们知道,初始化后,即使数组arr中没有元素,也是一个object ...

  9. Linux 系统日志管理 rsyslogd配置文件

    rsyslogd配置文件  rsyslogd 服务是依赖其配置文件 /etc/rsyslog.conf 来确定哪个服务的什么等级的日志信息会被记录在哪个位置的.也就是说,日志服务的配置文件中主要定义了 ...

  10. PHP中构造函数和析构函数解析

    构造函数 void __construct ([ mixed $args [, $... ]] ) PHP 5 允行开发者在一个类中定义一个方法作为构造函数.具有构造函数的类会在每次创建新对象时先调用 ...