建造者模式
- 建造者模式使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
- Builder着重于对象的创建过程,即复杂对象由可分离的若干步骤进行组合而成,步骤的组合过程就是复杂对象的构建过程,这里区别于工厂模式着重于得到一个复杂的整体产品,而不用关心或屏蔽掉内部的构建方式;而建造者模式着重于通过不同的部件、不同装配产生不同的复杂对象,更注重对象的构建过程;
C++实现:
/*************************************************************************
> File Name: builder.cpp
> Author: XXDK
> Email: v.manstein@qq.com
> 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;
}