设计模式概述之原型模式(六)

news2024/9/19 10:55:27

常说的设计模式是23种设计模式,分为3大类:

  • 创建型模式5种:工厂方法、抽象工厂、单例、建造者、原型
  • 结构型模式7种:适配器、代理、桥接、装饰者、外观、享元、组合
  • 行为型模式11种:模板方法、解释器、策略、观察者、迭代器、职责链、命令、备忘录、状态、访问者、中介者。

上次咱们说了“建造者模式”。今天来说“原型模式”。

“原型模式”是指已有一个类(原型类),将此类赋予可clone(克隆)的功能方法。

“class Anything”是将要克隆的一个类,必须实现Cloneable接口以支持clone功能,还要实现Serializable接口以支持序列化功能。(至于什么是序列化请参考IO技能中的“序列化与反序列化”的知识点取查阅。)

“class AnyOne”此类是“class Anything”的一个属性,也就是它的组成部分。

“class Anything”重写了clone方法,在实例化对象后,调用clone方法,方法返回结果是克隆后的对象将与原型对象不是同一对象。但是,它的组成部分“class AnyOne”的对象仍然和原型对象中的属性是同一对象,所以这样重写的clone方法叫“浅克隆”,仅仅是调用了父类的clone方法。

 

如果想要把“class Anything”实例化的对象及内部组成部分“class AnyOne”的对象完全克隆,就要用深克隆的方式解决。

 

“深克隆”指的是,将类中所有涉及的对象结构都克隆。

在代码中可以看出,重写clone方法时,利用了对象序列化的转换而达到的克隆效果,实际此代码并没将对象状态写入永久文件,而是将代码在内存中以Byte的类型进行了一次转换(写入及读取)。

实际测试调用效果便可知道,浅克隆及深克隆的特点。

 

下面来实现一个小的示例需求:

 

在四大名著《西游记》中,孙悟空是上入天下入地,可九天揽月,可下海捉鳖的狠人物。其中一大技能“身外化身”,再加手中的“金箍棒”谁人敢热。“单挑有神器,群殴叫兄弟”。

 

分身术相当的真实,即使再真实,也是分身,不是原型。因而这一技能,我们便可以用“原型模式”来表示出来。

先建立一个猴子类(Monkey),当然要由分身的技能(clone)。

当我们用浅克隆的时候,分身成功体现出来了,但是,猴子用的金箍棒是始终没有克隆。

这样的结果将会是,分身出多个个猴子都在使用一个金箍棒(GoldRingeStaff)。

所以要真正能够达到“猴手一个金箍棒”就需要使用深克隆的方式来解决。

 

“打群架”的孙悟空,“猴手一根金箍棒”

 

 在实际应用中,每当克隆出猴子一个分身,连带金箍棒也一并克隆了。

“原型模式”是利用clone(克隆)的形式复制出对象,属于创建对象的一种方法。

此篇结束后,加上前面所说的“工厂方法、抽象工厂、单例、建造者”,在23中设计模式中,创建型模式均已介绍完,希望大家能快速理解及应用。


以上就是今日分享,如果你喜欢记得点赞收藏哦,以防找不到我! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/102617.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python】关于PyHook3.HookManager的几个坑

疫情当下,群羊乱舞,请做好个人防护谨慎外出 接下来进入正题。 1、建议先把PyHook3.HookManager的一个小bug修好 这是类对象的析构bug,被析构(del)时触发:AttributeError: HookManager object has no attribute keyboard_hook …

【服务器数据恢复】xfs文件系统误操作导致分区丢失不可用的数据恢复案例

服务器数据恢复环境: 某公司一组服务器:磁盘柜raid卡,raid5磁盘阵列; linux操作系统XFS文件系统,共3个分区。 服务器故障: 服务器重装操作系统,完成操作后用户发现服务器的磁盘分区出现问题&am…

大三上算法习题

难度&#xff1a;1 1 二分查找返回关键值key在长度为len的数组arr[]中的位置&#xff0c;没有key则返回-1 int bi_search( int key, int arr[], int len ) //1 二分查找返回关键值key在长度为len的数组arr[]中的位置&#xff0c;没有key则返回-1#include <iostream> u…

如何制作一张标准地图样式的地图(附数据)

概述 大家有没有想过这样一个问题&#xff0c;我们在标准地图网站上看到的标准地图的样式&#xff08;形状&#xff09;和我们平时用到的地图不一样&#xff0c;那么是什么原因导致的呢&#xff0c;我们能够制作这样样式&#xff08;形状&#xff09;的标准地图吗&#xff0c;…

Tableau可视化设计案例-04标靶图、甘特图、瀑布图

文章目录Tableau可视化设计案例04标靶图、甘特图、瀑布图1.标靶图1.1二月份电量销售额完成情况1.2参考线与参考区间2.甘特图2.1甘特图的概念与用途2.2交货延期情况的甘特图2.3不同的日期类型选择3.创建超市不同子类别产品的盈亏瀑布图Tableau可视化设计案例 本文是Tableau的案…

手把手转行|你真的要转行吗?

首先&#xff0c;我不鼓励盲目转行。 但凡你还有选择的机会&#xff0c;转行&#xff0c;都不是你的第一选择。 如果你是为了逃避而转行&#xff0c;那多半会以失败告终。 原因是&#xff0c;你现在想要逃避的问题&#xff0c;当前不解决&#xff0c;换一家公司&#xff0c;也要…

现在学编程,只要开始行动都不晚

我要告诉大家的是&#xff0c;学习编程&#xff0c;任何时候都不晚。 咱们首先说工资&#xff0c;我一直认为&#xff0c;不看工资的岗位纯属耍流氓。如果你关注每年的薪资排行榜&#xff0c;金融和 IT 行业连续多年稳居前二&#xff0c;而比较有意思的是&#xff0c;哪怕薪资…

C++ Primer 第二章 变量和基本类型

C Primer 第二章 变量和基本类型2.1. Primitive Built-in Types2.1.1. Arithmetic Types2.1.3. Literals2.2 Variables2.2.1. Variable DefinitionsInitializersList InitializationDefault Initialization2.2.2. Variable Declarations and Definitions2.2.3. Identifiers2.3.…

set系列集合、collection集合的总结

无序 不重复 无索引 HashSet 元素无序的底层原理&#xff1a;哈希表&#xff1a; JDk1.7之前&#xff1a; JDK1.8之后&#xff1a; 总结&#xff1a; HashSet 元素去重复的底层原理&#xff1a; 因为传入的参数值一样&#xff0c;所以重写之后的hashcode方法所给出的哈希值是…

开科唯识冲刺创业板:年营收3.7亿 红杉奕信是二股东

雷递网 雷建平 12月19日北京开科唯识技术股份有限公司&#xff08;简称&#xff1a;“开科唯识”&#xff09;日前递交招股书&#xff0c;准备在深交所创业板上市。开科唯识计划募资8亿元&#xff0c;其中&#xff0c;3.19亿用于开科唯识智能财富管理及投研一体化平台建设项目&…

怎样使用Odoo 16 实现多公司管理

专业人士面临的最具挑战性的任务之一是在同一系统内管理多家公司。我们希望在浏览产品时不从一家公司切换到另一家公司。母公司下各公司的集中管理制定了多公司方法。一个组织由多个地点的分支机构组成&#xff0c;而母公司管理他分支机构的产品列表。母公司的每个分支机构都使…

[附源码]Python计算机毕业设计Django医院挂号住院管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

后端必知:遵循Google Java规范并引入checkstyle检查

IDEA配置Code Style 协同工作时&#xff0c;为了保证统一的代码风格&#xff0c;要求我们使用的规范&#xff0c;如果大家都用的是 IDEA&#xff0c;则推荐使用 Google Code Style&#xff0c;推荐阅读Google Java 编程风格中文文档。 先下载配置文件&#xff1a;github.com/…

牛客竞赛每日俩题 - Day10

目录 输入输出的细节 函数find&#xff08;&#xff09;的用法 输入输出的细节 收件人列表__牛客网 细节一&#xff1a;当输入转行后又要使用getline&#xff08;&#xff09;时&#xff0c;必须先使用getchar&#xff08;&#xff09;吃掉前面的转行符\n;细节二&#xff1a…

介绍一个助你事半功倍的数据挖掘神器!!

在Pandas模块当中&#xff0c;对于表格数据的分组操作&#xff08;groupby&#xff09;和透视表&#xff08;pivot_table&#xff09;的制作一直都是比较常见的&#xff0c;今天小编为大家分享一个数据分析的利器&#xff0c;能够自动为我们完成上述提到的一系列操作&#xff0…

arcgis读取NetCDF格式的数据(c#读取数据)

项目里面要用到降雨的数据&#xff0c;正好是.NC格式的&#xff0c;以前也没用过&#xff0c;正好记录下&#xff0c;大家也可以参考下&#xff0c;首先是arcgis是如何处理NC数据的&#xff0c;在arcgis软件里面有个多维工具箱&#xff0c;我用的是汉化版本的&#xff0c;英文版…

[附源码]计算机毕业设计Python的剧本杀管理系统(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

Verilog 简易单周期CPU

目录 本实验包含&#xff1a; 简易结构图&#xff1a; 各部件代码或实现&#xff1a; 控制器&#xff1a; 寄存器堆&#xff1a; ALU&#xff1a; 数据存储器&#xff1a; 指令存储器&#xff1a; CPU&#xff1a; tp&#xff08;仿真文件&#xff09;&#xff1a; 仿真…

如何去掉idea的诸多警告

File->setting->Editor->inspections 选择漏斗&#xff0c;选中warning&#xff0c;筛选出所有警告级别&#xff0c;然后去掉勾选&#xff0c;然后重启idea即可

重构物理Entity架构,支持更多的形状

上一节实战如何编译BEPUphysicsint源码到自己的项目, 如何整合物理引擎与Unity图形渲染。本节来从新调整设计,让物理的Entity基本操作与物理的形状分离,支持更多的物理形状,支持物理entity与Unity物体位移与旋转同步。主要分成以下3个部分: 1: 设计PhyBaseEntity&#xff0c;让…