设计模式之:建造者模式(builder)

建造者模式


  • 建造者模式使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
  • Builder着重于对象的创建过程,即复杂对象由可分离的若干步骤进行组合而成,步骤的组合过程就是复杂对象的构建过程,这里区别于工厂模式着重于得到一个复杂的整体产品,而不用关心或屏蔽掉内部的构建方式;而建造者模式着重于通过不同的部件、不同装配产生不同的复杂对象,更注重对象的构建过程;

C++实现:

/*************************************************************************
	> File Name: builder.cpp
	> Author: XXDK
	> Email: [email protected] 
	> Created Time: Wed 24 Oct 2018 05:33:15 PM CST
 ************************************************************************/

#include<iostream>
using namespace std;

class Builder 
{
public:
	Builder() {}
	virtual void BuildPart1() = 0;
	virtual void BuildPart2() = 0;
	virtual void BuildPart3() = 0;
	virtual ~Builder() {};
};

class Director 
{
public:
	Director(Builder* builder): builder_(builder) {}

	void Construct() { 
		builder_->BuildPart1();
		builder_->BuildPart2();
		builder_->BuildPart3();
	}	
	void SetBuilder(Builder* builder) {
		builder_ = builder;		
	}

	~Director() {}

private:	
	Builder* builder_;
};

class ConcreteBuilder : public Builder
{
public:
	ConcreteBuilder() {}

	void BuildPart1() override {
		result_.append("ConcreteBuilder::BuildPart1()......\n");
	}

	void BuildPart2() override {
		result_.append("ConcreteBuilder::BuildPart2()......\n");
	}

	void BuildPart3() override {
		result_.append("ConcreteBuilder::BuildPart3()......");
	}

	std::string GetResult() {
		return result_;
	}

	~ConcreteBuilder() {}

private:
	std::string result_;
};

class Client
{
public:
	Client(){}
	void BuildRequest() {
		ConcreteBuilder* builder = new ConcreteBuilder();				
		Director* director = new Director(builder);
		director->Construct();
		std::cout << builder->GetResult() << std::endl;
		
	}
	~Client(){}
};

int main()
{
	Client* client = new Client();
	client->BuildRequest();
	
	return 0;
}
发布了134 篇原创文章 · 获赞 20 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/u011583798/article/details/83352587