软件开发经典设计模式:创建型-原型模式

        原型模式(Prototype Pattern)是一种创建型设计模式,允许你通过复制现有对象来创建新的对象,而不是从头开始构建。这种模式主要通过提供一个用于复制对象的接口,定义生成对象的类型,并通过实例化对象的原型来复制它们,来实现对象的快速创建。

        核心思想:原型模式的核心思想是克隆现有的对象。通过克隆方法,而不是直接用 new 创建对象,可以动态地调整新对象的初始状态,也有助于提高创建对象的效率。

组成部分

  1. 原型接口(Prototype):定义一个用于克隆自身的接口。

  2. 具体原型(ConcretePrototype):实现一个克隆方法,该方法通过复制已有的实例来返回一个新的对象。通常使用 clone() 方法。

  3. 客户端(Client):客户端通过调用克隆方法来请求新的对象。这消除了直接依赖于具体对象类的需求。

简单示例:以下是一个在 C++ 中实现原型模式的简单示例:

#include <iostream>
#include <memory>
#include <string>
#include <unordered_map>

// 原型接口,定义 clone 方法
class Prototype {
public:
    virtual ~Prototype() = default;
    virtual std::unique_ptr<Prototype> clone() const = 0;
    virtual void print() const = 0;
};

// 具体原型类
class ConcretePrototype1 : public Prototype {
public:
    ConcretePrototype1(const std::string& name) : name_(name) {}

    std::unique_ptr<Prototype> clone() const override {
        return std::make_unique<ConcretePrototype1>(*this);
    }

    void print() const override {
        std::cout << "ConcretePrototype1: " << name_ << std::endl;
    }

private:
    std::string name_;
};

// 另一个具体原型类
class ConcretePrototype2 : public Prototype {
public:
    ConcretePrototype2(int value) : value_(value) {}

    std::unique_ptr<Prototype> clone() const override {
         return std::make_unique<ConcretePrototype2>(*this);
    }

    void print() const override {
        std::cout << "ConcretePrototype2: " << value_ << std::endl;
    }

private:
    int value_;
};

// 客户端代码
int main() {
    std::unordered_map<std::string, std::unique_ptr<Prototype>> prototypes;
    prototypes["Type1"] = std::make_unique<ConcretePrototype1>("Prototype 1");
    prototypes["Type2"] = std::make_unique<ConcretePrototype2>(42);

    auto prototype1 = prototypes["Type1"]->clone();
    prototype1->print();

    auto prototype2 = prototypes["Type2"]->clone();
    prototype2->print();

    return 0;
}

特点和优点

  • 快速创建实例:复制已有对象要比使用构造函数创建新对象更高效,尤其是在对象初始化需要较多复杂操作时。

  • 动态对象创建:原型模式允许动态调整对象的状态,而不依赖于编译时的类信息。

  • 减少对具体类的依赖:客户端无需知道对象的具体类结构,减少类间依赖,提高代码的灵活性和可扩展性。

使用场景

  • 成本高的对象创建:当直接使用构造函数创建对象的代价较高时,通过克隆比较直接创建更为高效。

  • 对象变化小:在对象的相似性很高,仅需少许调整来实现不同功能的场景,如数据缓存。

  • 减少子类组合:使用原型模式克隆出不同对象,相比创建复杂的类层次,更为简洁有效。

        原型模式使用对象克隆技术,提供了更为灵活的对象创建方式,特别适用于需要创建多个相似对象的场合。使用原型模式可减少代码冗余,同时提高动态扩展的弹性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值