创建型模式-原型模式
1 什么是原型模式
原型模式(Prototype Pattern)是一种创建型设计模式,它允许通过克隆现有对象来创建新对象,而无需通过标准的构造函数来创建。原型模式适用于需要创建复杂对象的场景,同时又希望避免构造函数的开销。
2 举个例子
举一个简单的例子来说明原型模式,假设我们有一个图形绘制程序,其中包含了各种图形对象(如圆形、矩形等),图形对象都有一些属性(如颜色、大小等),并且创建这些图形对象的过程比较耗时。现在我们希望创建多个相似的图形对象时能够复用已有对象的属性。
首先,我们定义一个抽象的图形原型接口 Shape,它包含了克隆接口 clone():
class Shape {
public:
virtual Shape* clone() = 0;
virtual void draw() = 0;
// 其他属性和方法
};
然后,创建具体的图形类 Circle 来实现图形原型接口,并在其构造函数中初始化图形的属性:
class Circle : public Shape {
public:
Circle(int radius, string color) : radius(radius), color(color) {}
Shape* clone() override {
return new Circle(*this);
}
void draw() override {
cout << "Draw a " << color << " circle with radius " << radius << endl;
}
private:
int radius;
string color;
};
在客户端代码中,我们可以使用原型模式来创建新的图形对象,而无需手动设置图形的属性:
int main() {
Circle* circlePrototype = new Circle(10, "red");
// 创建新图形对象
Circle* newCircle = dynamic_cast<Circle*>(circlePrototype->clone());
newCircle->setColor("blue");
circlePrototype->draw();
newCircle->draw();
delete circlePrototype;
delete newCircle;
return 0;
}
在上述示例中,我们通过原型模式,首先创建了一个具体的图形原型对象 circlePrototype,然后通过其 clone 方法克隆了一个新的图形对象 newCircle,最后修改了 newCircle 的颜色属性。
3 总结
通过原型模式,我们可以通过复制已有对象来创建新对象,而无需使用标准的构造函数,这对于创建复杂对象或者避免构造函数开销的场景非常有用。
作者QQ:115124903,欢迎交流。
每一步踏出,都是一次探索,一次成长。
每一步踏出,都是一次探索,一次成长。