建造者模式:
将一个复杂对象的建造过程和它的表示分离开来,这样相同的建造过程可以创建不同的表示。
Separate the construction of a complex object from its representation so that the same construction process can create different representations.
通俗一点就是如果流程是一样的,可以将这些流程抽象成一个类的一些接口,具体的创建过程可以在这个抽象类的子类中来实现。
C++中这个特性主要就是使用纯虚函数来实现。
UML图:
主要包括:
- Builder:指定了一个创建Product的一系列的接口。
- ConcreteBuilder:通过实现Builder中的接口具体实现了创建的步骤
- Director:定义了一个Buidler对象的引用来使用Builder的接口
- Product:表示需要创建的对象,ConcreteBuilder创建这个对象的每一部分。
具体的C++代码如下:
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <list>
#include <string>
using namespace std;
class Product
{
public:
void addPart(string str)
{
parts.push_back(str);
}
list<string>& getParts()
{
return parts;
}
private:
list<string> parts;
};
class Builder
{
public:
Builder()
{
product=new Product();
}
virtual void buildPart1()=0;
virtual void buildPart2()=0;
void getResult()
{
list<string>::iterator iter=product->getParts().begin();
for(;iter!=product->getParts().end();iter++)
{
std::cout<<*iter<<std::endl;
}
}
virtual ~Builder()
{
if(!product)
delete product;
}
protected:
Product *product;
};
class ConcreteBuilder1:public Builder
{
public:
void buildPart1()
{
product->addPart("part one");
}
void buildPart2()
{
product->addPart("part two");
}
};
class ConcreteBuilder2:public Builder
{
public:
void buildPart1()
{
product->addPart("part X");
}
void buildPart2()
{
product->addPart("part Y");
}
};
class Director
{
public:
Director()
{
}
Director(Builder * b):build(b)
{
}
void construct()
{
build->buildPart1();
build->buildPart2();
build->getResult();
}
private:
Builder *build;
};
int main()
{
std::cout<<"建造者模式测试"<<std::endl;
ConcreteBuilder1* cb1=new ConcreteBuilder1();
Director d1(cb1);
d1.construct();
ConcreteBuilder2 * cb2=new ConcreteBuilder2();
Director d2(cb2);
d2.construct();
return 0;
}
执行结果如下:
时间: 2024-10-03 14:14:49