设计模式--建造者模式C++实现

Posted 狼行博客园

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式--建造者模式C++实现相关的知识,希望对你有一定的参考价值。

建造者模式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++实现的主要内容,如果未能解决你的问题,请参考以下文章

23种设计模式:建造者模式

Java设计模式——建造者模式

23种设计模式[4]:建造者模式

设计模式系列 - 建造者模式

[设计模式C++go]创建型模式:建造者模式

[设计模式C++go]创建型模式:建造者模式