建造者模式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_;
};

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
建造者模式是一种创建型设计模式,它允许逐步创建复杂对象,同时使得创建过程更加灵活。在 C++ 中,可以使用类和对象来实现建造者模式。 以下是一个使用 C++ 实现建造者模式的示例: 首先,我们需要定义一个产品类,该类包含了需要创建的对象的属性: ```cpp class Product { public: void setPartA(const std::string& partA) { this->partA = partA; } void setPartB(const std::string& partB) { this->partB = partB; } void setPartC(const std::string& partC) { this->partC = partC; } std::string getInfo() const { return "Part A: " + partA + ", Part B: " + partB + ", Part C: " + partC; } private: std::string partA; std::string partB; std::string partC; }; ``` 接下来,我们需要定义一个抽象建造者类,该类定义了创建产品所需的所有方法: ```cpp class Builder { public: virtual void buildPartA() = 0; virtual void buildPartB() = 0; virtual void buildPartC() = 0; virtual Product* getResult() = 0; }; ``` 然后,我们可以定义具体的建造者类,该类实现了抽象建造者类中定义的所有方法,并负责创建具体的产品对象: ```cpp class ConcreteBuilder : public Builder { public: ConcreteBuilder() { product = new Product(); } void buildPartA() override { product->setPartA("Part A"); } void buildPartB() override { product->setPartB("Part B"); } void buildPartC() override { product->setPartC("Part C"); } Product* getResult() override { return product; } private: Product* product; }; ``` 最后,我们需要定义一个指挥者类,该类负责使用建造者对象来构建具体的产品: ```cpp class Director { public: void construct(Builder* builder) { builder->buildPartA(); builder->buildPartB(); builder->buildPartC(); } }; ``` 现在,我们可以使用建造者模式来创建具体的产品对象: ```cpp int main() { Director director; ConcreteBuilder builder; director.construct(&builder); Product* product = builder.getResult(); std::cout << product->getInfo() << std::endl; return 0; } ``` 输出结果为: ``` Part A: Part A, Part B: Part B, Part C: Part C ``` 这就是一个简单的 C++ 建造者模式实现

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杀神李

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值