在软件系统中,有时候面临着”一个复杂对象“的创建过程,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将他们组合在一起的算法却通常相对稳定。
如何应对这种变化?如何提供一种”封装机制“来隔离出”复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求改变而改变?
将一个复杂对象的构建与其表示相分离,使得同样的构建过程(稳定)可以创建出不通的表示(变化)
构建一个房子 朴素
class HouseBuilder{
public :
void Init(){
this->BuildPart1();
for(int i = 1;i < 4;i ++){
this->BuildPart2();
}
bool flag = this->BuildPart3();
if(flag){
this->BuildPart4();
}
this->BuildPart5();
}
virtual ~HouseBuilder();
protected:
virtual void BuildPart1() = 0;
virtual void BuildPart2() = 0;
virtual void BuildPart3() = 0;
virtual void BuildPart4() = 0;
virtual void BuildPart5() = 0;
}
class StoneHouse : public HouseBuilder{
protected:
virtual void BuildPart1() = {
};
virtual void BuildPart2() = {
};
virtual void BuildPart3() = {
};
virtual void BuildPart4() = {
};
virtual void BuildPart5() = {
};
}
int main(){
House *pHouse = new StoneHouse();
pHouse->Init()
}构造器模式
class House{
//..
}
class HouseBuilder{
public :
House getResult(){
return pHouse;
}
virtual ~HouseBuilder();
protected:
House *pHouse;
virtual void BuildPart1() = 0;
virtual void BuildPart2() = 0;
virtual void BuildPart3() = 0;
virtual void BuildPart4() = 0;
virtual void BuildPart5() = 0;
}
class Stone : public House{
}
class StoneHouseBuilder : public HouseBuilder{
protected:
virtual void BuildPart1() = {
};
virtual void BuildPart2() = {
};
virtual void BuildPart3() = {
};
virtual void BuildPart4() = {
};
virtual void BuildPart5() = {
};
}
class HouseDirector{
public :
HouseBuilder *pHouseBuilder;
HouseDirector(HouseBuilder *pHouseBuilder){
this->pHouseBulder = pHouseBuilder;
}
House Construct(){
pHouseBuilder->BuildPart1();
for(int i = 1;i < 4;i ++){
pHouseBuilder->BuildPart2();
}
bool flag = pHouseBuilder->BuildPart3();
if(flag){
pHouseBuilder->BuildPart4();
}
pHouseBuilder->BuildPart5();
return pHouseBuilder->GetResult();
}
}
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/168508.html原文链接:https://javaforall.cn