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

小谈设计模式(10)—原型模式

小谈设计模式(10)—原型模式

  • 专栏介绍
    • 专栏地址
    • 专栏介绍
  • 原型模式
    • 角色分类
      • 抽象原型(Prototype)
      • 具体原型(Concrete Prototype)
      • 客户端(Client)
      • 原型管理器(Prototype Manager)
    • 核心思想
    • Java代码实现
      • 代码分析
    • 优缺点分析
      • 优点
        • 简化对象的创建
        • 隐藏对象的创建细节
        • 支持动态添加和修改对象的属性
        • 提供了一种可替代的对象创建方式
      • 缺点
        • 克隆方法的实现可能较为复杂
        • 克隆对象与原型对象的关系可能较为复杂
        • 克隆对象的创建方式受限

专栏介绍

专栏地址

link

专栏介绍

主要对目前市面上常见的23种设计模式进行逐一分析和总结,希望有兴趣的小伙伴们可以看一下,会持续更新的。希望各位可以监督我,我们一起学习进步,加油,各位。
在这里插入图片描述

原型模式

这是一种创建型设计模式,它允许通过复制现有对象来创建新对象,而无需通过实例化类来创建。它通过克隆现有对象的属性和方法来创建新对象,从而避免了创建对象时的重复工作。

在这里插入图片描述

角色分类

抽象原型(Prototype)

定义了克隆方法的接口,通常是一个接口或抽象类。该接口中声明了一个克隆方法,用于复制原型对象。

具体原型(Concrete Prototype)

实现了抽象原型接口,提供了克隆方法的具体实现。具体原型对象通过克隆方法创建新的对象,同时复制原型对象的属性和方法。

客户端(Client)

通过调用克隆方法来创建新的对象。客户端可以通过克隆方法复制原型对象,然后根据需要修改克隆对象的属性。

原型管理器(Prototype Manager)

用于管理原型对象的创建和克隆过程。原型管理器可以维护一个原型对象的注册表,客户端通过原型管理器获取原型对象的克隆。

核心思想

原型对象的克隆方法,通过克隆方法可以复制原型对象的属性和方法,从而创建新的对象。客户端可以根据需要通过克隆方法创建新的对象,并可以自由地修改克隆对象的属性。原型模式可以有效地提高对象的创建效率,并使对象的创建过程更加灵活和可扩展。
在这里插入图片描述

Java代码实现

// 原型接口
interface Prototype {Prototype clone();
}// 具体原型类
class ConcretePrototype implements Prototype {private String name;public ConcretePrototype(String name) {this.name = name;}public Prototype clone() {return new ConcretePrototype(this.name);}public void setName(String name) {this.name = name;}public String getName() {return this.name;}
}// 客户端代码
public class Client {public static void main(String[] args) {// 创建原型对象Prototype prototype = new ConcretePrototype("原型对象");// 克隆原型对象Prototype clone = prototype.clone();// 修改克隆对象的属性((ConcretePrototype) clone).setName("克隆对象");// 输出原型对象和克隆对象的属性System.out.println("原型对象的属性:" + prototype.getName());System.out.println("克隆对象的属性:" + ((ConcretePrototype) clone).getName());}
}

代码分析

在上面的示例中,我们定义了一个原型接口 Prototype,其中包含一个 clone 方法用于克隆原型对象。然后,我们创建了一个具体原型类 ConcretePrototype,实现了 Prototype 接口,并在 clone 方法中返回一个新的克隆对象。

在客户端代码中,我们创建了一个原型对象 prototype,然后使用 clone 方法克隆了一个新的对象 clone。接下来,我们修改了克隆对象的属性,并输出了原型对象和克隆对象的属性。
在这里插入图片描述

优缺点分析

优点

简化对象的创建

原型模式通过克隆原型对象来创建新的对象,避免了重复创建对象的过程,提高了对象的创建效率。

隐藏对象的创建细节

客户端通过克隆方法获取新的对象,无需关心对象的创建细节,使得对象的创建过程对客户端透明。

支持动态添加和修改对象的属性

克隆对象可以独立于原型对象进行修改,不会影响到原型对象,使得对象的创建更加灵活和可扩展。

提供了一种可替代的对象创建方式

原型模式可以作为一种可替代的对象创建方式,特别适用于创建复杂对象或需要大量初始化的对象。

缺点

克隆方法的实现可能较为复杂

如果对象的属性较为复杂或存在循环引用等问题,实现克隆方法可能较为复杂。

克隆对象与原型对象的关系可能较为复杂

克隆对象与原型对象之间可能存在一定的关联关系,需要在克隆方法中进行处理,增加了代码的复杂性。

克隆对象的创建方式受限

克隆对象的创建方式受限于原型对象的结构,需要保证原型对象实现了克隆方法,且克隆方法能够正确地复制对象的属性。
在这里插入图片描述

相关文章:

小谈设计模式(10)—原型模式

小谈设计模式(10)—原型模式 专栏介绍专栏地址专栏介绍 原型模式角色分类抽象原型(Prototype)具体原型(Concrete Prototype)客户端(Client)原型管理器(Prototype Manager…...

用《斗破苍穹》的视角打开C#3 标签与反射(人物创建与斗技使用)

随着剧情的发展,主线人物登场得越来越多,时不时跳出一个大佬,对我张牙舞爪地攻击。眼花缭乱的斗技让我不厌其烦,一个不小心,我就记不清楚在哪里遇上过什么人,他会什么斗技了。这时候,我就特别希…...

c语言进阶部分详解(详细解析字符串常用函数,并进行模拟实现(下))

上篇文章介绍了一些常用的字符串函数,大家可以跳转过去浏览一下:c语言进阶部分详解(详细解析字符串常用函数,并进行模拟实现(上))_总之就是非常唔姆的博客-CSDN博客 今天接着来介绍一些&#x…...

一文看懂光模块的工作原理

你们好,我的网工朋友 光模块有很多类别,是我们经常要用到的PHY层器件。虽然封装,速率,传输距离有所不同,但是其内部组成基本是一致的。 以太网交换机常用的光模块有SFP,GBIC,XFP,X…...

基于SpringBoot的桂林旅游景点导游平台

目录 前言 一、技术栈 二、系统功能介绍 用户信息管理 景点类型管理 景点信息管理 线路推荐管理 用户注册 线路推荐 论坛交流 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实…...

【小程序 - 加强】自定义组件、使用npm包、全局数据共享、分包_05

目录 一、自定义组件 1. 组件的创建与引用 1.1 创建组件 1.2 引用组件 1.2.1 局部引用组件 1.2.2 全局引用组件 1.2.3 全局引用 VS 局部引用 1.2.4 组件和页面的区别 2. 样式 2.1 组件样式隔离 2.2 组件样式隔离的注意点 2.3 修改组件的样式隔离选项 2.4 styleIso…...

Vue.js3学习篇--Vue模板应用

目录 一,模板基础 1.模板插值 (1)基础插值 (2)HTML代码插值 (3)标签属性插值 2.模板指令 (1)定义 (2)指令参数 二.条件渲染 1.使用v-if指令渲染 2.使…...

【软考】5.2 传输介质/通信方式/IP地址/子网划分

《传输介质》 双绞线:网线;传输距离在100m以内 无屏蔽双绞线:UTP;可靠性相对较低屏蔽双绞线:STP;屏蔽怕干扰;可靠性相对较高;一般用于对传输可靠性要求很高的场合 网线&#xff1a…...

软件测试银行项目网上支付接口调用测试实例

公司最近有一个网站商城项目要开始开发了,这几天老板和几个同事一起开着需求会议, 讨论了接下来的业务规划和需求策略,等技术需求一下来还要讨论技术需求, 确认后再慢慢的进入开发阶段,趁着闲暇时间新造的人想总结一…...

w806 adc 中断扫描通道采集

用到了该芯片adc 扫描4个adc 通道,官方的死循环等待非常浪费时间,这里改用adc 中断采集方式,记录一下 int32_t adcFilterSum[4]{0}; int32_t detec_adc_value[4]{0};//mV int16_t detec_convt_ok[4]{0};/*is OK*/ ADC_HandleTypeDef hadc;vo…...

使用CSS的Positions布局打造响应式网页

在当今移动互联网的时代,响应式网页设计已经成为了一个必备的技能。通过使用CSS Positions布局,我们可以轻松地实现一个响应式的网页,使网页能够在不同的屏幕尺寸下自动适应。本文将介绍如何使用CSS Positions布局来打造一个响应式网页&#…...

模型训练环境相关(CUDA、PyTorch)

模型训练环境相关(CUDA、PyTorch) 1. 查看当前 GPU 所能支持的最高版本的 CUDA2. 如何判断是否安装了 CUDA3. 安装 PyTorch3.1 创建虚拟环境3.2 激活并进入虚拟环境3.3 安装 PyTorch 1. 查看当前 GPU 所能支持的最高版本的 CUDA 打开 NVIDIA 控制面板&a…...

链动2+1模式:社交电商行业的新型商业模式与营销手段

链动21模式是近年来在社交电商行业中崭露头角的一种新型商业模式和营销手段。在经历了多年的发展之后,社交电商行业已经进入了一个竞争激烈、用户获取成本高昂的阶段。在这个阶段,如何迅速吸引用户并增加他们的留存率和复购率成为了亟待解决的问题。 为了…...

竞赛选题 深度学习 opencv python 实现中国交通标志识别

文章目录 0 前言1 yolov5实现中国交通标志检测2.算法原理2.1 算法简介2.2网络架构2.3 关键代码 3 数据集处理3.1 VOC格式介绍3.2 将中国交通标志检测数据集CCTSDB数据转换成VOC数据格式3.3 手动标注数据集 4 模型训练5 实现效果5.1 视频效果 6 最后 0 前言 🔥 优质…...

LuatOS-SOC接口文档(air780E)-- fskv - kv数据库,掉电不丢数据

示例 -- 本库的目标是替代fdb库 -- 1. 兼容fdb的函数 -- 2. 使用fdb的flash空间,启用时也会替代fdb库 -- 3. 功能上与EEPROM是类似的 fskv.init() fskv.set("wendal", 1234) log.info("fskv", "wendal", fskv.get("wendal"))--[[ fs…...

一篇文章教你Pytest快速入门和基础讲解,一定要看!

前言 目前有两种纯测试的测试框架,pytest和unittestunittest应该是广为人知,而且也是老框架了,很多人都用来做自动化,无论是UI还是接口pytest是基于unittest开发的另一款更高级更好用的单元测试框架出去面试也好,跟别…...

SpringBoot项目:Cannot find declaration to go to

SpringBoot项目get,set方法总报Cannot find declaration to go to 搜了很多答案,没解决 后来仔细一想,原来是我的idea软件重装了,lombok插件没重新安装导致。 安装步骤: 1、下载地址:https://plugins.jetbrains.com…...

【高并发】多线程和高并发提纲

文章目录 三大源头两个主要问题三大解决方案 最近正在面试,对多线程和高并发相关问题整理了一个简单的提纲。 个人感觉这三大部分由底向上,足够引出对并发编程中大部分问题的讨论~ 三大源头 线程切换带来的原子性问题。 原子操作:利用CPU提…...

vue.js处理数组对象中某个字段是否变为两个字段

一、场景: 产品要求做一个时间步骤条,使用目前后端已返回的数据进行操作实现。时间步骤条要求日期和时间分开显示且相同日期只显示第一个日期。 图左边为实现效果,右边为后台返回的接口。接口中current字段表示当前到达第几步,从…...

从零开始的C++(补充三的内容)

auto:在编译阶段根据数据的类型确认auto所代表的类型,并将auto换成对应的类型。 特点: 1、auto所能代表的类型必须是在编译阶段就能确认的。 2、auto修饰的变量必须初始化,否则编译器无法判断auto的实际类型。 3、auto会根据第一个数据来…...

微信小程序通过createSelectorQuery获取元素 高度,宽度与界面距离

小程序官方有提供给我们一个 const query wx.createSelectorQuery() 函数 我们可以先编写这样一段代码 wxml <view><button bindtap"getDom">点击查看</button><view class "textIn" style "height: 100px;width: 30px;&quo…...

MySQL-事务

MySQL-事务 1.什么是事务 举例&#xff1a;想象炒菜的过程。 洗菜切菜炒菜装盘 我相信缺少任何任何一个步骤&#xff0c;都不完美&#xff01;&#xff01;&#xff01;可以将炒菜的过程理解为一个事务&#xff0c;是一组操作的集合&#xff0c;而MySQL中的事务也是如此。但…...

自动定时删除磁盘文件的脚本(从文件日期最早的开始删)

#!/bin/bash# 指定的挂载点 MOUNTPOINT"/media/vm/MyDisk512GB"# 设置磁盘大小的限制 (例如&#xff1a;800G) LIMIT$((800 * 1024 * 1024)) # 单位是KB# 获取挂载点的已使用空间 USED_SPACE$(df -kP "$MOUNTPOINT" | tail -1 | awk {print $3})echo &quo…...

拆解CPU的基本结构和运行原理

CPU的基本结构 CPU是一个计算系统的核心 南北桥芯片将CPU与外设连接起来 CPU执行流程 CPU的电路基础 组合电路基本原理 时序电路基本原理 多核成为主流 汇编语言和寄存器 中断的基本原理 中断的产生 中断服务程序 CPU 做为计算机的总司令官&#xff0c;它管理着计算…...

Docker安装——Ubuntu (Jammy 22.04)

一、为什么要用 Ubuntu&#xff1f;(centos和ubuntu有什么区别&#xff09; 使用lsb_release命令&#xff1a;lsb_release -a &#xff0c;即可查看ubantu的版本&#xff0c;但是为什么要使用ubantu 呢&#xff1f; 区别&#xff1a;1、centos基于EHEL开发&#xff0c;而ubunt…...

Fast DDS之Transport

目录 transport层负责为DDS用户数据收发和服务发现提供通信。包含UDP&#xff0c;TCP&#xff0c;SHM。...

爱普生L125X_L325X系列打印机Wi-Fi配置方法(Smart Panel)

准备工作&#xff1a; 手机需要下载“Epson Smart Panel”APP&#xff1b; 配置无线&#xff08;Wi-Fi&#xff09;方法 说明&#xff1a;SSID名称&#xff08;Wi-Fi名&#xff09;不能包含中文字符,路由器需要选择2.4GHz频段; 1. 打开“Epson Smart Panel”软件&#xff0…...

【回顾一下Docker的基本用法】

文章目录 回顾一下Docker的基本用法1.初识Docker1.1.什么是Docker1.1.1.应用部署的环境问题1.1.2.Docker解决依赖兼容问题1.1.3.Docker解决操作系统环境差异1.1.4.小结 1.2.Docker和虚拟机的区别1.3.Docker架构1.3.1.镜像和容器1.3.2.DockerHub1.3.3.Docker架构1.3.4.小结 1.4.…...

【Python】Python基础知识

【Python】Python基础知识 关键字 查看Python关键字&#xff1a; >python >>>import keyword >>>keyword.kwlist 注释 注释有两方面作用&#xff1a; &#xff08;1&#xff09;提高程序的可读性&#xff08;最重要的作用&#xff09;&#xff1b…...

【计算机视觉 05】YOLO论文讲解:V1-V7

https://ai.deepshare.net/live_pc/l_63243a65e4b050af23b79338 Part1.目标检测与YOLO系列 1. 目标检测任务及发展脉络 2. YOLO的发展史 Anchors Base原理&#xff1a; Part2.YOLOV1-V3 3. YOLO V1的网络结构 4. YOLO V3的网络结构与实验结果 Part3.YOLO的进化 5. YOLO V4的网络…...

沈阳网站建设公众号/网站建设的数字化和互联网化

源码 资源在qq群:2076966127 这个是我更新这个系列的第二期&#xff0c;现在看看几个月之前画的UI我真想吐了。好丑啊~~~~~ 现在我再一些大型的 图标网站找到了很多好看简介免费的图标~~ https://www.flaticon.com 这个就很不错~ 还是先准备好你的QtDesigner这个原本是为了C准备…...

wordpress主机cdn/爱站网关键词查询系统

复习方法(原创经验) 本复习方法是针对过了六级或者专四的同学&#xff0c;至少雅思要6分以上。如果你没过四级&#xff0c;请考pets3&#xff0c;如果你过了四级没过六级&#xff0c;请考pets4. 综合 推荐用书&#xff1a;《全国英语等级考试系列用书考核内容详析与辅助练习(第…...

asp网站如何虚拟发布/广告公司收费价格表

转载&#xff1a;http://meigesir.iteye.com/blog/1856503 当我们原来系统中有ubuntu的时候&#xff0c;如果我们重装或安装新的windows系统时&#xff0c;会发现ubuntu系统启动菜单不见啦&#xff0c;我们重现安装ubuntu系统也可以解决这个问题&#xff0c;但是我们以前在ubun…...

怎样用vs做简单网站/seo文章代写一篇多少钱

深度学习中经常看到epoch、 iteration和batchsize这三个的区别&#xff1a; &#xff08;1&#xff09;batchsize&#xff1a;批大小。在深度学习中&#xff0c;一般采用SGD训练&#xff0c;即每次训练在训练集中取batchsize个样本训练&#xff1b; &#xff08;2&#xff09;…...

免费视频素材网站哪个最好/站长之家工具高清

WINDOWS 7 PRO X86 2015年9月增量补丁包&#xff0c;从Windowsupdate.log中提取的微软官方下载地址&#xff0c;大部分是2015年9月8日发布的&#xff0c;可以通过下载软件批量下载&#xff1a;http://download.windowsupdate.com/d/msdownload/update/software/secu/2015/08/wi…...

建筑网官网软件/泉州seo报价

符号键&#xff08;CTRL开头&#xff09; CTRL1 PROPCLOSEOROPEN 对象特性管理器CTRL2或4 ADCENTER 设计中心CTRL3 CTOOLPALETTES 工具选项板CTRL8或QC QuickCalc 快速计算器控制键CTRLA AI_SELALL 全部选择CTRLC或CO/CP COPYCLIP或COpy 复制CTRLD或F6 COORDINATE 坐标CTRLE或F…...