您的位置:首页 > 编程语言 > C语言/C++

设计模式C++版:第四式建造者模式

2016-08-18 22:23 387 查看
开始建造者模式之前,我们先提出使用建造者模式的使用场景——有一个复杂对象需要构建,且构建过程是稳定的,这个时候我们可以考虑建造者模式。比如创建四边形,我们可以设定一个画图方式——顺时针画图。也就是说先画上面的一条边,再画右边的边,接着画下面的边,最后画左边的边。这个构造过程是稳定的。其实无论是顺时针还是逆时针或者是交叉画,一旦确定下来规则,整个构造过程就是稳定的了。当然你不能画三条边或者六条边,因为一旦你话的边的数量变化了,你构造的对象也就不再是所需要的对象了。所以说使用建造者模式的重点在于,建造者的过程是稳定的。如果一个对象的创建过程不稳定,或者说具有很大的灵活性,那时我们需要考虑设计模式的另一个招式——装饰者模式。

下面是关于建造者模式的示例:

#include <iostream>
class Builder
{
public:

virtual ~Builder(){ }

virtual void buidehead(){}

virtual void buidebody(){}

virtual void buidearms(){}

virtual void buidelegs(){}
};

class  FatBuilder :public Builder
{
public:
virtual void buidehead()
{
printf("建造肥大的头部!\n");
}

virtual void buidebody()
{
printf("建造肥大的躯体!\n");
}

virtual void buidearms()
{
printf("建造肥大的胳膊!\n");
}

virtual void buidelegs()
{
printf("建造肥大的腿部!\n");
}
};

class  ThinBuilder :public Builder
{
public:
virtual void buidehead()
{
printf("建造消瘦的头部!\n");
}

virtual void buidebody()
{
printf("建造消瘦的躯体!\n");
}

virtual void buidearms()
{
printf("建造消瘦的胳膊!\n");
}

virtual void buidelegs()
{
printf("建造消瘦的腿部!\n");
}
};

//用户直接和Director --- 指挥者打交道 创建人
class Driector
{
public:
Driector(Builder*builder) :m_builder(builder){}

void createperson()
{
m_builder->buidehead();
m_builder->buidebody();
m_builder->buidearms();
m_builder->buidelegs();
}
private:
Builder * m_builder;
};

int main()
{
Builder *builder = new ThinBuilder;
//Builder *builderfat = new FatBuilder;
Driector directorthin(builder);
directorthin.createperson();
delete builder;

builder = new FatBuilder;
Driector directorfat(builder);
directorfat.createperson();
delete builder;
return 0;
}





建造者模式的优点就是我们把建造的过程和它的表示分离,也就是说同样的建造过程可以创建不同的表示,得到不同的具体对象。其实也就是我们在创建过程之上又抽象了一层。


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: