本文章属于专栏《设计模式(极简c++版)》
继续上一篇《单例模式(极简c++)》。本章简要说明原型模式。本文分为**++模式说明、本质思想、实践建议、代码示例++**四个部分。
模式说明:
- 方案:基类有一个虚函数clone,返回基类指针,派生类继承接口。这样可以直接用基类指针拷贝,且不会出现派生类数据丢失的问题
- 优点:能对指向派生类的基类指针进行正确的拷贝
- 缺点:每个派生类和基类都需要实现clone方法。对引用的三方库,或者被其他开发者引用是,使用成本高
本质思想:通过基类虚函数,规范指向派生类的基类的拷贝行为
实践建议:实践中基本不用。难以维护,且只能在小范围使用,另外指向派生类的基类的深拷贝效率低,所以使用频率极低。如果实在需要,在基类中维护一个基础类型,转换时,通过基础类型判断,转换成派生类再拷贝
原型模式代码示例:
cpp
#include <iostream>
#include <string>
// 基类:鸟
class Bird {
public:
virtual Bird* clone() const = 0;
virtual void fly() const = 0;
};
// 派生类:麻雀
class Sparrow : public Bird {
public:
Bird* clone() const override {
return new Sparrow(*this); // 深拷贝
}
void fly() const override {
std::cout << "Sparrow flying!" << std::endl;
}
};
int main() {
// 创建原型对象
Bird* bird = new Sparrow();
// 根据原型对象克隆新对象
Bird* newBrid = bird->clone();
// 测试新对象
newBrid->fly(); // 输出: Sparrow flying!
// 释放资源
delete bird;
delete newBrid;
return 0;
}
下一篇:《适配器模式(极简c++)》