Prototype原型模式(对象创建)

原型模式:Prototype

链接:原型模式实例代码 + 注解

模式定义

使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建新的对象。 ——《设计模式》GoF

目的

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

P.s.

原型模式本质上也是类似于工厂模式的创建模式,我们先从

  • 底层结构上来看

    • 工厂是将创建新的对象这一子模块完全独立

    • 原型模式是将对象本身和创建它的接口耦合在一起

  • 从逻辑上来看

    • 工厂是只根据输入的初始化和默认参数来创建新的对象
    • 原型是根据已有的对象拷贝构造/克隆(深拷贝)一个状态一样的对象

从以上来看原型模式适用于对象内部复杂,初始化麻烦的情况。

:由于原型模式是加深了耦合,且必须有已有对象才能创建等诸多弊端,所以工厂模式在实际环境中使用的会更多。

要点总结

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

E.g
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一类医疗器械需要做EMC和安规吗?

摘要: 在医疗器械领域,EMC(电磁兼容性)和安规(安全规格)测试是非常重要的。医疗器械需要符合电磁兼容性标准,以确保其在电磁环境下能够正常运行而不会受到外部电磁干扰的影响,也不会干扰其他设备…

如何用SPSS对数据进行标准化处理?

下述回答节选自《SPSS统计学基础与实证研究应用精解》张甜 杨维忠 清华大学出版社 2023年。 打开相关数据,选择“分析”→“描述统计”→“描述”命令,弹出“描述”对话框。 选择进行描述分析的变量。在“描述”对话框的左侧列表框中选择“市盈率”&…

【算法】和为K的连续子数组

牛客链接:https://www.nowcoder.com/practice/704c8388a82e42e58b7f5751ec943a11?tpId196&&tqId37127&rp1&ru/ta/job-code-total&qru/ta/job-code-total/question-ranking 使用【前缀法】,把所有连续和合索引存进哈希表&#xff0c…

【Java】SpringBoot整合xxl-job学习使用详解

文章目录 介绍作用如何使用下载项目中央仓库地址环境调度中心初始化“调度数据库”配置部署“调度中心”部署项目调度中心集群(可选)其他:Docker 镜像方式搭建调度中心配置部署“执行器项目” 执行器maven依赖执行器配置执行器组件配置执行器…

【快速全面掌握 WAMPServer】13.PHP调试麻烦?请 xDebug 来帮忙!

网管小贾 / sysadm.cc 对于能否快速高效地编写程序,代码调试水平是多个重要指标之一。 按照这个逻辑,自然而然如何高效地调试代码也就成了一件非常重要而不得不让众多程序员面对的课题了。 其他编程语言的调试可能还好些,可是有过 PHP 程序…

蓝牙物联网漏洞攻击的几种方式?

在物联网日益普及的今天,蓝牙技术的广泛应用为我们的生活带来了诸多便利。然而,正如一枚硬币有两面,蓝牙技术的普及也带来了新的安全挑战。近日,一项关于蓝牙物联网漏洞攻击的研究引起了广泛关注。这项研究揭示了蓝牙物联网所面临…

微服务-理论(CAP,一致性协议)

CAP理论 关于CAP理论的介绍可以直接看这篇文章 CAP分别是什么? 一致性(Consistency 一致性包括强一致性,弱一致性,最终一致性。 一致性其实是指数据的一致性,为什么数据会不一致呢? 如上面这张图&…

金色麦芒的2023

2023年即将过去,回首这一年,我深感自己在技术和职业生涯中取得了巨大的进步。这一年里,我不仅在技术层面有了更深入的掌握,也在个人成长和职业规划上有了更明确的方向。 首先,在技术层面,我今年最大的收获是…

Nginx多ip部署多站点

目录 1.修改网卡配置信息 2.修改主要配置文件nginx.conf 1.修改网卡配置信息 1)来到网卡配置文件存放目录下 cd /etc/sysconfig/network-scripts/ 2)对 ifcfg-ens33 文件进行配置修改前先进行备份 cp ifcfg-ens33 ifcfg-ens33.default 3)先修改成最小配置,使用 d…

原生JS做别踩白块游戏

思路 创建初始一个按钮并为他添加点击监听开始创建随机方块,并样式_box.offsetTop speed px结合setInterval使得方块不断下移创建和删除方块的原则:box.offsetTop>0(可视区上部没有方块了)时候需要创建一行方块,…

体元法--体积计算

文章目录 环境:1.1 体元法介绍:2.1 python代码3.1 可视化 环境: Open3D 1.1 体元法介绍: 用一个个体素去占据点云,然后对所有体素求和 2.1 python代码 conda activete deeplabv3plus(环境名称–安装好open3D的) py…

iOS 小组件开发

iOS14之后Apple引入了新的WidgetKit,舍弃了原有额TodayExtension。 开发准备: 新的WidgetExtension只能通过SwiftUI进行开发; Widget有三种尺寸:systemSmall、 systemMedium、systemLarge,三种尺寸对应固定的UI类型布…