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

        本文章属于专栏- 概述 - 《设计模式(极简c++版)》-CSDN博客


        本章简要说明原型模式。本文分为模式说明、本质思想、实践建议、代码示例四个部分。

 模式说明

  • 方案:基类有一个虚函数clone,返回基类指针,派生类继承接口。这样可以直接用基类指针拷贝,且不会出现派生类数据丢失的问题
  • 优点:能对指向派生类的基类指针进行正确的拷贝
  • 缺点:每个派生类和基类都需要实现clone方法。对引用的三方库,或者被其他开发者引用是,使用成本高

本质思想:通过基类虚函数,规范指向派生类的基类的拷贝行为

实践建议:实践中基本不用。难以维护,且只能在小范围使用,另外指向派生类的基类的深拷贝效率低,所以使用频率极低。如果实在需要,在基类中维护一个基础类型,转换时,通过基础类型判断,转换成派生类再拷贝

原型模式代码示例

#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;
}

 

相关推荐

  1. 原型模式c++)》

    2024-03-24 03:48:03       57 阅读
  2. 模版模式c++)》

    2024-03-24 03:48:03       34 阅读
  3. 《工厂模式c++)》

    2024-03-24 03:48:03       42 阅读
  4. 《过滤器模式c++)》

    2024-03-24 03:48:03       46 阅读
  5. 《适配器模式c++)》

    2024-03-24 03:48:03       45 阅读
  6. 《组合模式c++)》

    2024-03-24 03:48:03       42 阅读
  7. 《外观模式c++)》

    2024-03-24 03:48:03       37 阅读
  8. 《备忘录模式c++)》

    2024-03-24 03:48:03       37 阅读
  9. 《命令模式c++)》

    2024-03-24 03:48:03       33 阅读
  10. 《状态模式c++)》

    2024-03-24 03:48:03       152 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-24 03:48:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-24 03:48:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-24 03:48:03       82 阅读
  4. Python语言-面向对象

    2024-03-24 03:48:03       91 阅读

热门阅读

  1. os.path模块(二)

    2024-03-24 03:48:03       39 阅读
  2. Go语言介绍

    2024-03-24 03:48:03       49 阅读
  3. 如何快速上手vue?

    2024-03-24 03:48:03       45 阅读
  4. vivado 布线、路线_设计

    2024-03-24 03:48:03       49 阅读
  5. 素数问题 python

    2024-03-24 03:48:03       38 阅读
  6. 家庭影院组成原理

    2024-03-24 03:48:03       39 阅读
  7. openSSH学习

    2024-03-24 03:48:03       44 阅读