大话设计模式C++版本-09-建造者模式

简介: 大话设计模式C++版本-09-建造者模式

概述

建造者模式:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。

建造者模式其实就是在创建复杂对象时,使用一个Builder类(建造者类)来规范了必要的步骤,并且使用一个Director类(指挥类)来规范建造过程


应用场景

一些基本部件不会变,而其组合经常变化的时候。例如:画一个小人,小人的基本部件(头、身体、两只手、两只脚)以及画的过程一般都不会变的;而画瘦子或胖子就需要改变画的方法了。


一般步骤

1.写一个Builder类规范必要的步骤,每个步骤都是纯虚函数,所以子类必须重写,没有重写则编译不过,所以每个必要的步骤都实现了,不会漏掉哪个步骤;

 // 建造者类-规范了必要的步骤,因为都是纯虚函数,所以子类必须重写,否则编译不过
class Builder
{
public:
  virtual void BuildPartA() = 0;
  virtual void BuildPartB() = 0;
  virtual Product *GetResult() = 0;
};

2.写子类,继承Builder类,并实现必要的步骤

class ConcreatBuilder1 : public Builder
{
private:
  Product *product;
public:
  ConcreatBuilder1()
  {
    product = new Product();
  }
  ~ConcreatBuilder1()
  {
    delete product;
  }
  void BuildPartA()
  {
    product->Add("部件A");
  }
  void BuildPartB()
  {
    product->Add("部件B");
  }
  Product *GetResult()
  {
    return product;
  }
};
class ConcreatBuilder2 : public Builder
{
private:
  Product *product;
public:
  ConcreatBuilder2()
  {
    product = new Product();
  }
  ~ConcreatBuilder2()
  {
    delete product;
  }
  void BuildPartA()
  {
    product->Add("部件X");
  }
  void BuildPartB()
  {
    product->Add("部件Y");
  }
  Product *GetResult()
  {
    return product;
  }
};

3.写一个Director类规范建造过程,这个类就是规定了Builder类的步骤哪个是第一步、第二步、第三步 …

class Director // 指挥类-控制建造过程。
{
public:
  void Construct(Builder *builder)
  {
    builder->BuildPartA();
    builder->BuildPartB();
  }
};

具体实例完整代码

#include <iostream>
#include <list>
#include <string>
using namespace std;
class Product
{
private:
  list<string> parts;
public:
  void Add(string part)
  {
    parts.push_back(part);
  }
  void Show()
  {
    for (list<string>::iterator it=parts.begin();
       it!=parts.end(); ++it)
    {
      cout << *it << endl;
    }
  }
};
// 建造者类-规范了必要的步骤,因为都是纯虚函数,所以子类必须重写,否则编译不过
class Builder 
{
public:
  virtual void BuildPartA() = 0;
  virtual void BuildPartB() = 0;
  virtual Product *GetResult() = 0;
};
class ConcreatBuilder1 : public Builder
{
private:
  Product *product;
public:
  ConcreatBuilder1()
  {
    product = new Product();
  }
  ~ConcreatBuilder1()
  {
    delete product;
  }
  void BuildPartA()
  {
    product->Add("部件A");
  }
  void BuildPartB()
  {
    product->Add("部件B");
  }
  Product *GetResult()
  {
    return product;
  }
};
class ConcreatBuilder2 : public Builder
{
private:
  Product *product;
public:
  ConcreatBuilder2()
  {
    product = new Product();
  }
  ~ConcreatBuilder2()
  {
    delete product;
  }
  void BuildPartA()
  {
    product->Add("部件X");
  }
  void BuildPartB()
  {
    product->Add("部件Y");
  }
  Product *GetResult()
  {
    return product;
  }
};
class Director // 指挥类-控制建造过程。
{
public:
  void Construct(Builder *builder)
  {
    builder->BuildPartA();
    builder->BuildPartB();
  }
};
int main()
{
  Director *director = new Director();
  Builder *builder1 = new ConcreatBuilder1();
  Builder *builder2 = new ConcreatBuilder2();
  director->Construct(builder1);
  Product *product1 = builder1->GetResult();
  product1->Show();
  director->Construct(builder2);
  Product *product2 = builder2->GetResult();
  product2->Show();
  return 0;
}

参考资料

程杰老师的《大话设计模式》

如果对你有帮助的话,记得点赞收藏,如果有什么遗漏的或者有什么体会,请在评论告诉我,好东西记得分享 ^ _ ^

目录
相关文章
|
2月前
|
设计模式 算法
设计模式--建造者模式 builder
这篇文章通过一个电脑购买的例子,详细解释了建造者模式的四个角色(产品类、抽象构建者、实体构建类和指导者类),并提供了相应的代码实现,阐述了建造者模式在设计复杂对象时的应用和优势。
设计模式--建造者模式 builder
|
20天前
|
Linux 编译器 测试技术
【C++】CentOS环境搭建-快速升级G++版本
通过上述任一方法,您都可以在CentOS环境中高效地升级G++至所需的最新版本,进而利用C++的新特性,提升开发效率和代码质量。
120 64
|
22天前
|
Linux 编译器 测试技术
【C++】CentOS环境搭建-快速升级G++版本
通过上述任一方法,您都可以在CentOS环境中高效地升级G++至所需的最新版本,进而利用C++的新特性,提升开发效率和代码质量。
150 63
|
2月前
|
设计模式 算法 Java
Java设计模式-建造者模式(6)
Java设计模式-建造者模式(6)
|
3月前
|
设计模式 XML 存储
【四】设计模式~~~创建型模式~~~建造者模式(Java)
文章详细介绍了建造者模式(Builder Pattern),这是一种创建型设计模式,用于将复杂对象的构建与其表示分离,允许分步骤创建一个复杂的对象而无需指定其内部的具体构造细节。通过定义抽象建造者、具体建造者、指挥者和产品角色,建造者模式允许通过相同的构建过程创建不同的产品表示,提高了系统的灵活性和扩展性。
|
4月前
|
设计模式 C++
C++一分钟之-设计模式:工厂模式与抽象工厂
【7月更文挑战第14天】设计模式是解决软件设计问题的通用方案。工厂模式与抽象工厂模式是创建型模式,用于对象创建而不暴露创建逻辑。工厂模式推迟实例化到子类,但过度使用会增加复杂性。抽象工厂则创建相关对象族,但过度抽象可能造成不必要的复杂度。两者均应按需使用,确保设计灵活性。代码示例展示了C++中如何实现这两种模式。
41 3
|
3月前
|
缓存 C++ Windows
Inno setup 脚本判断 Microsoft Visual C++ Redistributable 不同版本区别
Inno setup 脚本判断 Microsoft Visual C++ Redistributable 不同版本区别
|
4月前
|
设计模式 安全 C++
C++一分钟之-C++中的设计模式:单例模式
【7月更文挑战第13天】单例模式确保类只有一个实例,提供全局访问。C++中的实现涉及线程安全和生命周期管理。基础实现使用静态成员,但在多线程环境下可能导致多个实例。为解决此问题,采用双重检查锁定和`std::mutex`保证安全。使用`std::unique_ptr`管理生命周期,防止析构异常和内存泄漏。理解和正确应用单例模式能提升软件的效率与可维护性。
45 2
|
5月前
|
设计模式 算法
建造者模式-大话设计模式
建造者模式-大话设计模式
|
5月前
|
Linux vr&ar C语言
Linux怎样更新Centos下Gcc版本支持C17?Centos7快速安装gcc8.3.1 可支持C++17(附gcc相关链接整理)
Linux怎样更新Centos下Gcc版本支持C17?Centos7快速安装gcc8.3.1 可支持C++17(附gcc相关链接整理)
282 2