原型模式
原型模式是一种创建型模式,用于创建一些创建过程复杂且重复的对象。它提供一个类的原型和一个用于克隆对象的接口,当直接创建对象的代价比较大时,则采用这种模式,可以减少重复的操作,提高运行的效率。
示例
类的定义:
class Circle //圆形类
{
public:
Circle();
Circle(double radius);
double getRadius();
double getGirth();
double getArea();
Circle *clone();
Circle *operator=(Circle*);
private:
double radius; //半径
double girth; //周长
double area; //面积
};
类的实现:
#define PI 3.1415
Circle::Circle() {}
Circle::Circle(double radius) : radius(radius) {
area = radius * radius * PI;
girth = 2 * radius * PI;
}
double Circle::getRadius() {
return radius;
}
double Circle::getGirth() {
return girth;
}
double Circle::getArea() {
return area;
}
Circle *Circle::clone() {
Circle *circle = new Circle();
circle = this;
return circle;
}
Circle *Circle::operator=(Circle *circle) {
circle->radius = radius;
circle->girth = girth;
circle->area = area;
return circle;
}
使用(创建number个相同半径的圆):
static vector<Circle*> createCircle(int number, double radius) {
vector<Circle*> circles;
Circle *circlePrototype = new Circle(radius);
circles.push_back(circlePrototype);
for(int i = 1; i < number; i++) {
circles.push_back(circlePrototype->clone());
}
return circles;
}
总结
优点:1、性能高。 2、除了构造函数外又提供多一种创建对象的方法。
缺点: 1、必须实现clone方法。 2、 容易出错,如果对象的成员有指向其它对象的指针时,可能需要处理。