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

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

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

这个类理解的并不好。

原文地址:https://www.cnblogs.com/perfy576/p/8554216.html