1.什么是生成器模式?
一个对象生成一般通过构造函数,把类的生成过程进行拆分就是生成器模式。
2.为什么需要生成器模式?
1.构造函数参数过多,从代码上来看这也是不雅观的,可用生成器模式来避免这种情况。
2.一个类的构造过程过于复杂,每一个对象的实现细节有可能不一样,例如现在我要构造一个基金账户的类,账户类型有分为香港和美国,我们在构造对象的时候还要根据初始化的金额去对用户进行风险评估,因为类型的不同,所以评估的方法也不一样,解决方法是可以定义多个构造函数或者把这个评估方法单独抽取出来,但是这样会造成单个类的代码过多,逻辑也不清晰,但是如果我们用了生成器模式,那么我们可以定义一个最基本的builder类,然后生成美国和香港2个builder类,如果以后要再加入其它的国家,只要基本的过程不变,那么我们还能根据基本的builder去生成其它国家的builder类。
3.样例
生成器模式有几个名词:
1.产品:我们最后想要得到的结果。
2.基本生成器:所有在构造过程中可能用到的方法,但不给具体的实现。
3.具体生成器:一般由产品和基本生成器构成,而且实现了生成器全部或者一部份的方法。
4.管理者:实现对具体生成器的调用,没有也是可以的。
#include<iostream>
#include<algorithm>
#include<string.h>
#include<string>
using namespace std;
class Car{
string name;
string color;
string style;
public:
void set_name(string name)
{
this->name = name;
}
void set_color(string color)
{
this->color = color;
}
void set_style(string style)
{
this->style = style;
}
string get_name()
{
return this->name;
}
string get_style()
{
return this->style;
}
string get_color()
{
return this->color;
}
};
class Builder{
public:
virtual void set_name(string name) = 0; //纯虚函数
virtual void set_color(string color) = 0;
virtual void set_style(string style) = 0;
};
class SuvCar:public Builder{
Car car;
public:
void set_name(string name)
{
car.set_name(name);
}
void set_color(string color)
{
car.set_color(color);
}
void set_style(string style)
{
car.set_style(style);
}
Car get_car()
{
return this->car;
}
};
int main()
{
SuvCar* suv_car = new SuvCar();
suv_car->set_color("yellow");
suv_car->set_name("suv");
suv_car->set_style("big");
Car car = suv_car->get_car();
cout<<car.get_color()<<endl;
cout<<car.get_name()<<endl;
cout<<car.get_style()<<endl;
return 0;
}