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