c++ 设计模式23讲之建造者模式

建造者模式是将局部成员构建成一个整体,返回整体产品对象,抽象工厂是针对一系列产品的对象创建和返回

建造者模式

定义:

将一个复杂对象的构建与表示分离,通过导演类方法依次组装好局部零件返回产品对象

优点:

(1)客户端不需知道产品内部细节,只跟建造的导演类有依赖关系

(2)具体建造间无相关性,便于扩展

(3)产品集成创建只在导演类方法中,便于修改

缺点:

(1)创建的产品必须具有共性,否则导演类建造方法会很复杂

(2)产品内部比较复杂(既有众多的局部成员)具体的建造类会很庞大

使用范围:

产品内部结构具有多个成员变量,成员变量满足一定的建造顺序

如:电脑组装

结构:

director:导演类,实现产品局部零件的组装;product_builder_pattern:具体产品构建类,实现每个产品成员构建的方法

product:产品类,包含局部零件的成员

实现:

namespace creational_pattern
{
	class product
	{
	public:
		std::string part_head{""};
		std::string part_trail{ "" };
	};
	class builder_pattern
	{
	public:
		virtual void build_part_head() = 0;
		virtual void build_part_trail() = 0;
		virtual std::shared_ptr<product> get_product() = 0;
	protected:
		std::shared_ptr<product> pro{ new product };
	};

	class product_builder_pattern : public builder_pattern
	{
	public:
		virtual void build_part_head() override
		{
			pro.get()->part_head = "创建头部成功";
		}
		virtual void build_part_trail() override
		{
			pro.get()->part_trail = "创建尾部成功";
		}
		virtual std::shared_ptr<product> get_product() override
		{
			return pro;
		}
	};
	class director
	{
	public:
		std::shared_ptr<product> construct()
		{
			builder.get()->build_part_head();
			builder.get()->build_part_trail();
			return builder.get()->get_product();
		}

	private:
		std::shared_ptr<builder_pattern> builder{ new product_builder_pattern() };
	};
}

测试:

基于GoogleTest 的单元测试框架;框架可参考如下网址:

https://www.cnblogs.com/jycboy/p/gtest_catalog.html

using namespace creational_pattern;
TEST(test_builder_pattern_director_construct, build_product)
{
	director direc;
	std::cout << direc.construct().get()->part_head << "---" << direc.construct().get()->part_trail << std::endl;
	ASSERT_EQ(1 , 1);
}

总结

(1)建设者模式功能是实现将产品的零件组装成一个完整的产品(类似于组装手办)

(2)参品类只需知道组成的成员,无需关心成员流水线创建过程

(3)集成创建过程(类似组装总厂)负责对所有成员的组装,具体产品建造类提供对产品每个成员零件的封装方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值