《原型模式(极简c++)》

本文章属于专栏《设计模式(极简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++)》

相关推荐
White_Can5 分钟前
《C++11:列表初始化》
c语言·开发语言·c++·vscode·stl
White_Can14 分钟前
《C++11:右值引用与移动语义》
开发语言·c++·stl·c++11
比奇堡派星星16 分钟前
Linux4.4使用AW9523
linux·开发语言·arm开发·驱动开发
民乐团扒谱机18 分钟前
【微实验】数模美赛备赛MATLAB实战:一文速通各种“马尔可夫”(Markov Model)
开发语言·人工智能·笔记·matlab·数据挖掘·马尔科夫链·线性系统
Z1Jxxx19 分钟前
字符串翻转
开发语言·c++·算法
闻缺陷则喜何志丹20 分钟前
【前缀和 期望】P7875 「SWTR-7」IOI 2077|普及+
c++·算法·前缀和·洛谷·期望
爱喝水的鱼丶27 分钟前
SAP-ABAP:全面破解SAP与第三方系统集成超时难题:从应急排查到根治方案
开发语言·sap·abap·接口集成·开发交流
AI小怪兽28 分钟前
基于YOLO11的航空安保与异常无人机检测系统(Python源码+数据集+Pyside6界面)
开发语言·人工智能·python·yolo·计算机视觉·无人机
CSDN_RTKLIB31 分钟前
ODR、linkage问题解惑
开发语言·c++
Aevget31 分钟前
智能高效Go开发工具GoLand v2025.3全新上线——新增资源泄漏分析
开发语言·ide·后端·golang·go