• 设计模式--建造者模式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扩展

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

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

  • 相关阅读:
    [idea]2014.1.13
    [idea]2014.1.12
    纪念我2014.1.4 中国银行广东分行面试
    [essay]2014.1.2
    纪念我12月29日南方电网笔试
    [essay]12.26
    [idea]
    纪念我12月24日终于用妖姬拿首胜了
    Android自动化测试环境部署
    Monitor工具使用详解
  • 原文地址:https://www.cnblogs.com/lang5230/p/5322290.html
Copyright © 2020-2023  润新知