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 理解
这个设计模式,和工厂模式类似。但是这里多了一个指导类。
这个类理解的并不好。