小谈设计模式(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。接下来,我们修改了克隆对象的属性,并输出了原型对象和克隆对象的属性。
在这里插入图片描述

优缺点分析

优点

简化对象的创建

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

隐藏对象的创建细节

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

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

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

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

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

缺点

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

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

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

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

克隆对象的创建方式受限

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

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

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

相关文章

创建GCP service账号并管理权限

列出当前GCP项目的所有service account 我们可以用gcloud 命令 gcloud iam service-accounts list gcloud iam service-accounts list DISPLAY NAME EMAIL DISABLED terraform …

苹果手机怎么备份所有数据?2023年iPhone 15数据备份常用的3种方法!

当苹果手机需要进行刷机、恢复出厂设置、降级iOS系统等操作时,我们需要将自己的iPhone数据提前进行备份。 特别是在苹果发布新iOS系统时,总有一些小伙伴因为升降级系统,而导致了重要数据的丢失。 iPhone中储存着重要的照片、通讯录、文件等数…

ahk系列——ahk_v2实现win10任意界面ocr

前言: 不依赖外部api接口,界面简洁,翻译快速,操作简单, 有网络就能用 、还可以把ocr结果非中文翻译成中文、同样可以识别中英日韩等60多个国家语言并翻译成中文,十分的nice 1、所需环境 windows10及其以上…

GPU版本的Pytorch安装

GPU版本的Pytorch安装 1.CUDA的安装 查看自己计算机CUDA支持的版本 2.CUDNN的安装 对应找到CUDNN的版本 3.Pytorch的安装 找自己的CUDA对应的PYtorch安装包 https://pytorch.org/get-started/previous-versions/ 并在下面的页面下载 https://download.pytorch.org/whl/cu101/to…

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

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

BERT相关模型不能下载问题

Author:龙箬 Computer Application Technology Change the World with Data and Artificial Intelligence ! CSDNweixin_43975035 生有热烈,藏与俗常 由于网络原因,不能下载BERT相关模型 及 tokenizer urllib3.exceptions.MaxRetryError: HTTPSConnectio…

使用Windows系统自带的安全加密解密文件操作步骤详解

原以为安全加密的方法是加密压缩包,有的需要用软件加密文件,可每次想往里面修改或存放文件都要先解密,不用时,还得去加密,操作步骤那么多,那多不方便呀,这里讲讲用系统自带的BitLocker加密工具怎…

强化学习------Qlearning算法

简介 Q learning 算法是一种value-based的强化学习算法,Q是quality的缩写,Q函数 Q(state,action)表示在状态state下执行动作action的quality, 也就是能获得的Q value是多少。算法的目标是最大化Q值,通过在状态state下…

html通过使用图像源的协议(protocol)相对 URL 来防止安全/不安全错误

有人知道使用 protocol relative URLs 是否有问题吗&#xff1f;用于图像源以防止混合内容安全警告。 例如链接一张图片: <img src"//domain.com/img.jpg" /> 代替: <img src"http://domain.com/img.jpg" /> or <img src"https…

day10.8ubentu流水灯

流水灯 .text .global _start _start: 1.设置GPIOE寄存器的时钟使能 RCC_MP_AHB4ENSETR[4]->1 0x50000a28LDR R0,0X50000A28LDR R1,[R0] 从r0为起始地址的4字节数据取出放在R1ORR R1,R1,#(0x1<<4) 第4位设置为1STR R1,[R0] 写回2.设置PE10管脚为输出模式 G…

Android多线程学习:线程

一、概念 进程&#xff1a;系统资源分配的基本单位&#xff0c;进程之间相互独立&#xff0c;不能直接访问其他进程的地址空间。 线程&#xff1a;CPU调度的基本单位&#xff0c;线程之间共享所在进程的资源&#xff0c;包括共享内存&#xff0c;公有数据&#xff0c;全局变量…

10.8c++作业

#include <iostream>using namespace std; class Rect {int width; //宽int height; //高 public://初始化函数void init(int w,int h){widthw;heighth;}//更改宽度void set_w(int w){widthw;}//更改高度void set_h(int h){heighth;}//输出矩形周长和面积void show(){co…

ASO优化之应用程序图标的设计技巧

用户在App Store页面上&#xff0c;首先看到的是我们的移动应用程序图标&#xff0c;所以应用图标的设计至关重要。如果这不能引起用户的注意&#xff0c;他们可能不会费心去了解有关我们的应用的更多信息。 1、脱颖而出的重要性。 具有附加价值&#xff0c;如果做得好&#x…

bigemap在林业勘测规划设计行业的一些应用

选择Bigemap的原因&#xff1a; 主要注重影像的时效性&#xff0c;软件的影像时效性比其他的更新快&#xff0c;更清晰。 使用场景&#xff1a; 1.林业督查&#xff0c;主要是根据国家下发的图斑&#xff0c;结合测绘局的影像以及bigemap的较新影像对比去年和今年的林地变化。…

MySQL——使用mysqldump备份与恢复数据

目录 1.mysqldump简介 2.mysqldump备份数据 2.1 备份所有数据库 2.2 备份一个/多个数据库 2.3 备份指定库中的指定表 3.mysqldump恢复数据 3.1 恢复数据库 3.2 恢复数据表 1.mysqldump简介 mysqldump命令可以将数据库中指定或所有的库、表导出为SQL脚本。表的结构和表中…

Survey on Cooperative Perception in an Automotive Context 论文阅读

论文链接 Survey on Cooperative Perception in an Automotive Context 0. Abstract 本文就协同基础设施领域提供相关环境的调查回顾了感知中涉及的主要模块&#xff1a;定位&#xff0c;目标检测和跟踪&#xff0c;地图生成提供了协同感知的 SWOT 1. Intro 无人驾驶汽车的背…

力扣 -- 647. 回文子串

解题步骤&#xff1a; 参考代码&#xff1a; class Solution { public:int countSubstrings(string s) {int ns.size();vector<vector<bool>> dp(n,vector<bool>(n));//无需初始化int ret0;//一定要从下往上填写每一行for(int in-1;i>0;i--){//每一行的i…

Acwing.889 满足条件的01序列

题目 给定n个0和n个1&#xff0c;它们将按照某种顺序排成长度为2n的序列&#xff0c;求它们能排列成的所有序列中&#xff0c;能够满足任意前缀序列中0的个数都不少于1的个数的序列有多少个。 输出的答案对109&#xff0b;7取模。 输入格式 共一行&#xff0c;包含整数n。 …

嵌入式Linux裸机开发(一)基础介绍及汇编LED驱动

系列文章目录 文章目录 系列文章目录前言IMX6ULL介绍主要资料IO表现形式 汇编LED驱动原理图初始化流程时钟设置IO复用设置电气属性设置使用GPIO 编写驱动编译程序编译.o文件地址链接.elf格式转换.bin反汇编&#xff08;其他&#xff09; 综合成Makefile完成一步编译烧录程序imx…

电脑挂代理问题解析:如何应对常见疑难杂症

使用代理对电脑进行网络访问是保护个人隐私、绕过封锁等常用策略。然而&#xff0c;在实际应用中可能会遇到各种问题&#xff0c;如连接失败、速度缓慢等疑难杂症。本文将为您解析电脑挂代理时常见问题的原因&#xff0c;并分享解决方案&#xff0c;帮助您应对这些困扰&#xf…