建造者模式c++实现

构造一个超复杂对象的时候 将其构造过程和表示相分离 让其构造过程高度可以变化 通过增加director类可以更改构造步骤的顺序 通过增加新的builder类可以高度自定义每个步骤的过程

缺点:一般只有超大型项目才会使用该模式 其他不需要 且类繁多 代码不好阅读

优点:符合开闭原则 将构造过程与表示彻底分离 可以随心所欲的构造复杂对象

uml图:

代码实现如下:

//builder适用场景 大型项目 极其复杂的类对象的创建 且创建该类对象时遵循的步骤是相同的 
//可以将对象的创建与表示相分离 比如考虑如下一个场景 一个人类要被生产则要由手脚头躯干四部分组成
//但是每一个组件的生成都是高度可自定义的 我们就可以做如下抽象
//适用于构建过程变化非常频繁的对象 且构造步骤也非常麻烦 通过修改增加director可以更改装配步骤
//通过修改增加builder可以增加不同步骤的不同实现
//但是如果要加入新的步骤 新的构造过程则需要更改抽象基类builder也会变得非常麻烦
class human
{
public:
	void some_complex_func_before_build() {};
};
class man :public human
{
};
class woman :public human
{
};
class humanBuilder
{
public:
	virtual void buildArm() = 0;
	virtual void buildHead() = 0;
	virtual void buildFeet() = 0;
	virtual void buildBody() = 0;
	virtual human* getResult() = 0;
protected:
	human* human_;
};
class manBuilder:public humanBuilder
{
public:
	manBuilder()
	{
		human_ = new man;
	}
	human* getResult()
	{
		return human_;
	}
	virtual void buildArm()
	{
		human_->some_complex_func_before_build();
	}
	virtual void buildHead()
	{
		human_->some_complex_func_before_build();
	}
	virtual void buildFeet()
	{
		human_->some_complex_func_before_build();
	}
	virtual void buildBody()
	{
		human_->some_complex_func_before_build();
	}
};
class womanBuilder :public humanBuilder
{
public:
	womanBuilder()
	{
		human_ = new woman;
	}
	human* getResult()
	{
		return human_;
	}
	virtual void buildArm()
	{
		human_->some_complex_func_before_build();
	}
	virtual void buildHead()
	{
		human_->some_complex_func_before_build();
	}
	virtual void buildFeet()
	{
		human_->some_complex_func_before_build();
	}
	virtual void buildBody()
	{
		human_->some_complex_func_before_build();
	}
};
class humandirector
{
	humandirector(humanBuilder* h):human_builder_(h)
	{
	}
	human* construst()
	{
		human_builder_->buildArm();
		human_builder_->buildBody();
		human_builder_->buildFeet();
		human_builder_->buildHead();
		return human_builder_->getResult();
	}
private:
	humanBuilder* human_builder_;
};

猜你喜欢

转载自blog.csdn.net/qq_16401691/article/details/128179726
今日推荐