<aside> 💡
建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
</aside>
getResult
由 Director类 来控制建造过程,由 Builder类 来返回具体产品
https://kamacoder.com/problempage.php?pid=1084
#include <iostream>
#include <string>
using namespace std;
// Product类
class Bike{
public:
string frame;
string tires;
public:
void show(){
cout << frame << " Frame " << tires << " Tires" << endl;
}
};
// Builder类
class Builder{
protected:
Bike* bike;
public:
virtual void buildFrame() = 0;
virtual void buildTires() = 0;
Bike* getResult(){
return bike;
};
};
// 具体建造者类
class MountainBikeBuilder: public Builder{
public:
MountainBikeBuilder(){
bike = new Bike();
}
~MountainBikeBuilder(){
delete bike;
}
void buildFrame() override {
bike->frame = "Aluminum";
}
void buildTires() override {
bike->tires = "Knobby";
}
};
class RoadBikeBuilder: public Builder{
public:
RoadBikeBuilder(){
bike = new Bike();
}
~RoadBikeBuilder(){
delete bike;
}
void buildFrame() override {
bike->frame = "Carbon";
}
void buildTires() override {
bike->tires = "Slim";
}
};
// Director类
class BuilderDirector{
public:
void build(Builder* builder){
builder->buildFrame();
builder->buildTires();
}
};
int main(){
int n;
cin >> n;
string bikeType;
for(int i = 0; i < n; ++i){
cin >> bikeType;
Builder* builder = nullptr;
if(bikeType == "mountain"){
builder = new MountainBikeBuilder();
}else if(bikeType == "road"){
builder = new RoadBikeBuilder();
}
BuilderDirector* builderDirector = new BuilderDirector();
builderDirector->build(builder);
Bike* bike = builder->getResult();
bike->show();
delete builder;
delete builderDirector;
delete bike;
}
return 0;
}