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

    1 建造者模式

    1.0 需求

    当一个类创建过程复杂的时候,传入参数较多,而且部分参数可以默认。

    通过不同的构造顺序能够实例化出不同的对象。

    因此需要一个统一方式来建造。

    1.1 实现

    需要构造的类A,中需要提供一些列的set方法,方便填充。(不在使用构造函数,因为不会直接使用构造函数构造函数,而是使用一个创建类来构造)

    使用建造者类封装A的各种set,使用指导者类,具体的调用建造者类的各种set。

    //人员
    class ClerkDetail
    {
    public:
      clerkDetail()=default;
      clerkDetail(string name);      //表示必填的字段
      string sex();                  //下面的是字段的设置和获取选项,使用了重载。
      void sex(string s);
      int age();
      void age(int i);
    private:
      string _name;
      string _sex;                   //下面两个表示选填的字段
      int      _age;
    };
    
    //模板继承的基类
    class abClerkTplt
    {
      virtual void sex(int);      
      virtual void age(int);      
      virtual ClerkDetail* getclerk();
    };
    
    //人员的一些模板
    class ManClerk:public abClerkTplt
    {
    public: 
      ManClerk()
      {
        _clerk=new ClerkDetail;
      }
      virtual void sex(int i)
      {
        _clerk->sex(i);
      }
      virtual void  age(int i)
      {
        _clerk->age(i);
      }
      virtual ClerkDetail* get_clerk()
      {
        return _clerk;
      }
    private:
      ClerkDetail *_clerk;
    };
    
    //人员的一些模板,这里还是一个模板
    class WomanClerk:public abClerkTplt
    {
      //....
    };
    
    //一个执行模板子类的类。
    class createClerk
    {
    public:
      createClerk(abClerkTplt* tplt)
      {
        _tplt=tplt;
      }
      void create()
      {
        _tplt->age(1);
        _tplt->sex(2);
      }
    private:
      abClerkTplt* _tplt;
    };
    
    //使用
    int main()
    {
      abClerkTplt* manTplt=new ManClerk;
      createClerk   dir(manTplt);
      dir.create();
      ClerkDetail *clerk1=manTplt->get_clerk();
    }
    

      

    1.2 理解

    这个设计模式,和工厂模式类似。但是这里多了一个指导类。

    这个类理解的并不好。

  • 相关阅读:
    Yougth的最大化(好题,二分查找 0 1分数规划)
    Cable master(好题,二分)
    Can you find it?(二分 二分+STL set map)
    Can you solve this equation?(二分)
    Bridging signals(二分 二分+stl dp)
    A Bug's Life
    Is It A Tree?(并查集)
    简单计算器(栈)
    Linux学习之常用压缩命令(三)
    Linux系统之常用文件搜索命令
  • 原文地址:https://www.cnblogs.com/perfy576/p/8554216.html
Copyright © 2011-2022 走看看