Factory Method,Abstract Factory,Prototype,Builder属于”对象创建“模式。“对象创建”绕开new,来避免new过程中导致的紧耦合,从而支持创建对象的稳定性。
motivation:在面对“一个复杂对象”创建时,通常其各子部分用一定的算法构成;由于需求变化,各子部分会剧烈变化,但是其算法确实稳定的。
key interface or class:
1.init函数中实现个子部份的构建算法 。
feature: 和template method很像,但是构造函数不能调用子类的函数(override的版本),因为子类构造时需要先调用父类的构造函数,所以将其放在init函数中。
structure:
template codes:
class House{
//。。。
}
//house的构建基类
class HouseBuilder{
public:
void Init(){
//实现构建过程的算法
this->BuilderPart1();
for(int i=0;i<N; i++){
this->BuilderPart2();
}
if(flag){
this->BuilderPart3();
}
}
protected:
Hoouse* house;
virtual BuilderPart1()=0;
virtual BuilderPart2()=0;
virtual BuilderPart3()=0;
}
//实现具体的构建类
class StneHouse:public House{
//具体房子类
}
class StoneHouseBuilder:public HouseBuilder{
//实现不同的BuilderPart
}
summary:
1. builder模式分步骤构建一个复杂对象,该步骤是一个稳定算法;
2.Builder模式可以应对不同子部份的构建,但是缺点是不能应对算法的变动;
3.builder模式中,要注意不同语言(c++,c#)之间调用虚函数的区别。