当前位置: 首页 > news >正文

原型模式(C++)

定义

使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建新的对象。

应用场景

  • 在软件系统中,经常面临着“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是它们却拥有比较稳定一致的接口。
  • 如何应对这种变化?如何向“客户程序(使用这些对象的程序)”隔离出“这些易变对象”,从而使得“依赖这些易变对象的客户程序”不随着需求改变而改变?

结构

在这里插入图片描述

代码示例

//Prototype.h
//对象深拷贝实现 
/****************************************************/
#ifndef PROTOTYPE_H
#define PROTOTYPE_H
#include<iostream>
using namespace std;class prototype
{
public:prototype() { i = 10; j = 3.23; };prototype(const prototype &proto) { i = proto.i; j = proto.j; };~prototype() {};int get_i() { return i; };double get_j() { return j; };private:int i;double j;
};#endif
//test.cpp
/****************************************************/
#include <iostream>
#include <string>
#include "Prototype.h"
int main()
{prototype a;cout << "i: " << a.get_i() << endl << "j: " << a.get_j() << endl;prototype b(a);cout << "i: " << b.get_i() << endl << "j: " << b.get_j() << endl;return 0;
}

运行结果
在这里插入图片描述

要定总结

  • Prototype模式同样用于隔离类对象的使用者和具体类型(易变类)之间的耦合关系,它同样要求这些“易变类”拥有“稳定的接口”。
  • Prototype模式对于“如何创建易变类的实体对象”采用“原型克隆”的方法来做,它使得我们可以非常灵活地动态创建“拥有某些稳定接口”的新对象——所需工作仅仅是注册一个新类的对象(即原型),然后在任何需要的地方Clone。
  • Prototype模式中的Clone方法可以利用某些框架中的序列化来实现深拷贝
http://www.lryc.cn/news/114209.html

相关文章:

  • web浏览器打开本地exe应用
  • 微信小程序如何配置并使用less?
  • 【Spring】反射动态修改Bean实例的私有属性值
  • MySQL DDL 数据定义
  • Ventoy 设置VTOY_MAX_SEARCH_LEVEL = 0只扫描U盘根目录 不扫码子目录
  • vue3父子同信的双向数据实现
  • Shiro是什么?为什么要用Shiro?
  • Vue3+Vite+Pinia+Naive后台管理系统搭建之九:layout 动态路由布局
  • 从零开始学Python(Ⅰ)基本变量与数据类型
  • SQL ASNI where from group order 顺序 where和having,SQL底层执行原理
  • Mac M2 Ventura(13.3) 新机 安装Cocoapods
  • Unity 引擎做残影效果——2、屏幕后处理方式
  • 考研算法38天:反序输出 【字符串的翻转】
  • “深入解析JVM:探秘Java虚拟机的工作原理“
  • [Flask]SSTI1
  • Object Map 的相互转换
  • VS+Qt环境下解决中文乱码问题
  • 互联网摸鱼日报(2023-08-08)
  • NTT DATA利用相干伊辛机模拟基因组组装和疾病治疗的潜力
  • 哈希表语法(转载自用)
  • 打破界限,图文档与物料清单完美互联
  • 【电机绘图】:插补算法(一)—直线插补—逐点比较法
  • 16-2_Qt 5.9 C++开发指南_使用样式表Qss自定义界面
  • chatgpt openai API报错openai.error.APIConnectionError
  • 【果树农药喷洒机器人】Part1:研究现状分析以及技术路线介绍
  • QT-QTablewidget 设置选中某一行
  • [shell] 删除指定文件状态变更之前的文件及文件夹示例
  • 代码中 isEmpty 和 isBlank 的区别
  • 为什么要选择文件传输软件?有哪些最佳高速文件传输软件?
  • aardio + customPlus 显示图片演示