C++原型模式(Prototype)

生活实例:创建公司员工入职档案

场景描述:
假设你是一家公司的人力资源经理,需要为新加入的员工创建入职档案。这些档案通常包含基本信息(例如姓名、地址、职位等)和一些公司共有的政策文档、培训资料等。但每次都从头创建这些档案是非常耗时的。

于是,你可以创建一个基本的入职档案模板,然后每次有新员工加入时,只需复制这个模板并填入该员工的个人信息即可。这种操作实际上就是原型模式的一个应用。

角色及其对应的原型模式组件:

  1. 原型对象(Prototype):

    • 生活中的入职档案模板。
    • C++ 中的 Prototype 接口或抽象类,定义了一个用于复制自身的纯虚方法。
  2. 具体原型(Concrete Prototype):

    • 生活中的具体入职档案模板,例如软件工程师的模板。
    • C++ 中的具体类,继承自 Prototype,实际上实现了复制自己的功能。

实例化这个场景:

  • 你有一个标准的入职档案模板(具体原型),可以用它为每个新员工创建入职档案。
  • 每次需要一个新的档案时,直接复制(克隆)这个模板,而不是重新编制所有资料。

代码示例

为了更好地理解,我们来看一个简单的 C++ 代码示例,模拟上述入职档案的场景。

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

// 原型接口
class EmployeePrototype {
public:
    virtual ~EmployeePrototype() {}
    virtual std::unique_ptr<EmployeePrototype> clone() const = 0;
    virtual void display() const = 0;
};

// 具体原型:员工档案模板
class EmployeeRecord : public EmployeePrototype {
private:
    std::string name;
    std::string address;
    std::string position;
public:
    EmployeeRecord(const std::string& name, const std::string& address, const std::string& position)
        : name(name), address(address), position(position) {}

    // 实现clone方法,使用智能指针自动管理内存
    std::unique_ptr<EmployeePrototype> clone() const override {
        return std::make_unique<EmployeeRecord>(*this);
    }

    void display() const override {
        std::cout << "Employee: " << name << ", Address: " << address << ", Position: " << position << std::endl;
    }
};

int main() {
    // 创建一个具体原型对象(软件工程师的入职档案模板)
    std::unique_ptr<EmployeePrototype> engineerPrototype = std::make_unique<EmployeeRecord>("Template", "123 Example St", "Software Engineer");

    // 使用原型对象克隆多个实例,并为每个新员工定制信息
    std::unique_ptr<EmployeePrototype> newEmployee1 = engineerPrototype->clone();
    static_cast<EmployeeRecord*>(newEmployee1.get())->display();

    std::unique_ptr<EmployeePrototype> newEmployee2 = engineerPrototype->clone();
    static_cast<EmployeeRecord*>(newEmployee2.get())->display();

    return 0;
}

解释

  • EmployeePrototype 接口类 定义了 clone 和 display 方法,用于复制对象和显示档案信息。
  • EmployeeRecord 类 是一个具体的原型,实现了 clone 和 display 方法。
    • clone 方法使用拷贝构造函数创建一个新的 EmployeeRecord 对象。
    • display 方法输出员工的基本信息。
  • 在 main 函数中,首先创建一个 EmployeeRecord 对象,作为入职档案模板。
  • 然后通过调用 clone 方法,可以快速生成多个员工档案实例,再设置每个新员工的特定信息,并在需要的时候展示内容。

这个例子展示了如何通过复制一个标准档案模板来创建新员工的入职档案,从而减少了重复操作,提高了效率。这正是原型模式在实际生活中的应用方式之一。

希望这个例子能帮助你更好地理解原型模式,并且更贴近你所需要的实际应用场景!

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值