• 设计模式-建造者模式(创建型)


    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 理解

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

    这个类理解的并不好。

  • 相关阅读:
    Appium入坑前必看,附爬虫心得
    app爬虫神器--mitmproxy,mitmdump和appium的安装使用
    小米手机安装charles 证书 无法安装证书,与iphone的unkown,无法联网问题
    mac安装于启动Grafana
    charles单单抓不到google beowser的包
    charles Failed to install helper
    常规反爬复习总结
    FakeUserAgentError('Maximum amount of retries reached') 解决办法
    Java--Set的三个具体实现类
    Java集合--接口
  • 原文地址:https://www.cnblogs.com/perfy576/p/8554216.html
Copyright © 2020-2023  润新知