创建型模式-原型模式

发布时间 2023-11-10 14:16:06作者: Qt小罗

1 什么是原型模式

原型模式(Prototype Pattern)是一种创建型设计模式,它允许通过克隆现有对象来创建新对象,而无需通过标准的构造函数来创建。原型模式适用于需要创建复杂对象的场景,同时又希望避免构造函数的开销。

2 举个例子

举一个简单的例子来说明原型模式,假设我们有一个图形绘制程序,其中包含了各种图形对象(如圆形、矩形等),图形对象都有一些属性(如颜色、大小等),并且创建这些图形对象的过程比较耗时。现在我们希望创建多个相似的图形对象时能够复用已有对象的属性。
首先,我们定义一个抽象的图形原型接口 Shape,它包含了克隆接口 clone():

class Shape {
public:
    virtual Shape* clone() = 0;
    virtual void draw() = 0;
    // 其他属性和方法
};

然后,创建具体的图形类 Circle 来实现图形原型接口,并在其构造函数中初始化图形的属性:

class Circle : public Shape {
private:
    int radius;
    string color;

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;
    }
};

在客户端代码中,我们可以使用原型模式来创建新的图形对象,而无需手动设置图形的属性:

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 总结

通过原型模式,我们可以通过复制已有对象来创建新对象,而无需使用标准的构造函数,这对于创建复杂对象或者避免构造函数开销的场景非常有用。