zoukankan      html  css  js  c++  java
  • 设计模式---建造者模式

    故事背景:好菜每回味不同?

    概念:

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

    一个复杂对象是由多个部件组成的,建造者模式是把复杂对象的创建和部件的创建分别开来,分别用Builder类和Director类来表示。

    用Director构建最后的复杂对象,而在上面Builder接口中封装的是如何创建一个个部件(复杂对象是由这些部件组成的),也就是说,Director负责如何将部件最后组装成产品。

    这样建造者模式就让设计和实现解耦了。刚开始接触建造者模式的时候,最容易把建造者和抽象工厂模式混淆了。

    由于而这都属于创建型的设计模式,所以二者之间是有公共点的,但是建造者模式注重于对象组合,即不同的小对象组成一个整体的复杂大对象,而抽象工厂模式针对于接口编程,只是对外提供创建对象的工厂接口,不负责对象之后的处理。

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

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

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

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

    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;
    
    };
    

      

    应用:

    优点:

    封装性

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

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

    使用场景:

    相同方法,不同顺序

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

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

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

    注意事项:

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

    扩展:

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

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

  • 相关阅读:
    PHP操作目录(文件夹)的常用函数
    PHP处理时间的常用函数
    PHP操作文件的常用函
    PHP处理数组的常用函数
    PHP处理字符串的常用函数
    什么是 CGI?什么是 FastCGI?php-fpm,FastCGI,Nginx 之间是什么关系?
    一天一个 Linux 命令(18):ln 命令
    IntelliJ IDEA get set 快捷键
    mysql的一些问题记录
    数据库的乐观锁和悲观锁是什么?怎么实现的?
  • 原文地址:https://www.cnblogs.com/zhanghu52030/p/8111267.html
Copyright © 2011-2022 走看看