生活实例:创建公司员工入职档案
场景描述:
假设你是一家公司的人力资源经理,需要为新加入的员工创建入职档案。这些档案通常包含基本信息(例如姓名、地址、职位等)和一些公司共有的政策文档、培训资料等。但每次都从头创建这些档案是非常耗时的。
于是,你可以创建一个基本的入职档案模板,然后每次有新员工加入时,只需复制这个模板并填入该员工的个人信息即可。这种操作实际上就是原型模式的一个应用。
角色及其对应的原型模式组件:
-
原型对象(Prototype):
- 生活中的入职档案模板。
- C++ 中的 Prototype 接口或抽象类,定义了一个用于复制自身的纯虚方法。
-
具体原型(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
方法,可以快速生成多个员工档案实例,再设置每个新员工的特定信息,并在需要的时候展示内容。
这个例子展示了如何通过复制一个标准档案模板来创建新员工的入职档案,从而减少了重复操作,提高了效率。这正是原型模式在实际生活中的应用方式之一。
希望这个例子能帮助你更好地理解原型模式,并且更贴近你所需要的实际应用场景!