23种设计模式之原型模式

news2024/11/15 19:55:25

前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章将23种设计模式中的原型设计模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识。
如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。
小威在此先感谢各位大佬啦~~🤞🤞
在这里插入图片描述

🏠个人主页:小威要向诸佬学习呀
🧑个人简介:大家好,我是小威,一个想要与大家共同进步的男人😉😉
目前状况🎉:24届毕业生,在一家满意的公司实习👏👏

💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,我亲爱的大佬😘

以下正文开始

文章目录

  • 原型模式概念
  • 原型模式优缺点
  • 原型模式案例

在这里插入图片描述

原型模式概念

原型模式(Prototype Pattern)是23种设计模式之一,它的主要作用是用于创建重复的对象,同时又能保证性能。通过克隆一个现有对象来生成新的对象,而不是使用 new 运算符创建。

实现原理
原型模式的实现原理非常简单,首先需要一个可以被克隆的原型对象,然后通过调用该原型对象的克隆方法,从而得到一个新的对象。

在 Java 中,Object 类提供了一个 clone() 方法,该方法可以将一个对象复制一份,但需要实现 Cloneable 接口,否则会抛出 CloneNotSupportedException 异常。

原型模式优缺点

接下来介绍下原型模式的优缺点

优点:

可以通过克隆现有的对象来创建新的对象,避免了对象的重复创建,提高了系统性能。 可以动态的添加或修改原型对象的属性,可以扩展性好。

缺点:

必须实现 Cloneable 接口,并重写 clone() 方法,这在某些情况下可能会影响到其他接口的实现。
对象中包含的所有成员变量都必须支持 clone() 方法,否则无法进行克隆。 克隆是浅拷贝,如果需要深拷贝需要额外处理。

适用场景
希望避免重复创建相似对象,同时又希望保证性能。
希望动态的扩展对象的属性,同时又希望保证代码的简洁性。

原型模式案例

下面通过一个案例来一起来学习原型模式,详细代码片段如下:

// 定义一个可克隆对象接口
interface Cloneable {
    public Object clone();
}

// 定义一个具体可克隆对象类
class ConcretePrototype implements Cloneable {
    private String name;
    
    public ConcretePrototype(String name) {
        this.name = name;
    }
    
    // 实现克隆方法,返回新的对象副本
    public Object 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) {
        // 创建原型对象
        ConcretePrototype prototype = new ConcretePrototype("origin");
        
        // 复制一个新对象
        ConcretePrototype clone = (ConcretePrototype)prototype.clone();
        
        // 修改克隆对象的属性
        clone.setName("clone");
        
        // 输出结果
        System.out.println(prototype.getName());  // 输出 "origin"
        System.out.println(clone.getName());  // 输出 "clone"
    }
}

在上面的示例中,我们首先定义了一个可克隆对象接口 Cloneable 和一个具体可克隆对象类 ConcretePrototype。该类实现了克隆方法,并在其中创建了一个新的对象副本。客户端通过调用克隆方法来复制一个新的对象,并可以修改其属性。

这是一个简单的原型模式示例,它展示了如何通过复制现有对象来生成新的对象副本。在实际应用中,原型模式通常会更复杂一些,但这个简单示例足以说明原型模式的基本原理。

好了,本篇文章就先分享到这里了,后续将会继续介绍23种设计模式之其他模式,感谢大佬认真读完支持咯~
在这里插入图片描述

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起讨论😁
希望能和诸佬们一起努力,今后我们顶峰相见🍻
再次感谢各位小伙伴儿们的支持🤞

在这里插入图片描述

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

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

相关文章

(10)Qt---项目打包

目录 项目打包 1. 设置应用图标** 2. Debug与Release模式*** 3. 动态链接库** 4. 程序打包* 5. 新版本Qt的安装与使用* 项目打包 一款正常的软件产品应该在任何的计算机中运行,不需要单独安装Qt的开发环境,因此需要把之前的项目打包成一个安装包。 1. 设…

Ctfshow [单身杯]

文章目录 web签到easyPHPescapeshellcmdescapeshellargsedawk 姻缘测试 web签到 <?php # -*- coding: utf-8 -*- # Author: h1xa # Date: 2022-03-19 12:10:55 # Last Modified by: h1xa # Last Modified time: 2022-03-19 13:27:18 # email: h1xactfer.com # link: h…

Java EE 进阶---多线程(一)

目录 一、常见的锁策略 乐观锁 vs 悲观锁 重量级锁 vs 轻量级锁 读写锁&#xff06;普通互斥锁 自旋锁&#xff06;挂起等待锁 可重入锁&#xff06;不可重入锁 公平锁&#xff06;非公平锁 synchronized实现了哪些锁策略&#xff1f; 二、Compare And Swap 比较并交换…

File类、IO数据流介绍

文章目录 &#x1f412;个人主页&#x1f3c5;JavaSE系列专栏&#x1f4d6;前言&#xff1a;&#x1f380;File类的设计&#x1fa85;数据流的流向 &#x1f3c5;对数据操作的类&#x1f9f8;按单位划分&#x1f9f8;按封装类型划分 &#x1f380;整理File常用方法 &#x1f41…

解析HTTPS的加密

文章目录 简介加密原理对称加密常用的对称加密算法&#xff1a;简单解析DES 非对称加密常用的非对称加密算法&#xff1a;简单解析RSA算法公钥和私钥的制作&#xff1a;加密和解密过程&#xff1a; 加密过程数字证书摘要算法解析一下MD5算法 简介 HTTPS 使用了 SSL (Secure So…

2023最新软件测试八股文,能不能拿心仪Offer就看你背得怎样了

很多同学会问测试面试八股文有必要背吗&#xff1f; 我的回答是&#xff1a;很有必要。你可以讨厌这种模式&#xff0c;但你一定要去背&#xff0c;因为不背你就进不了大厂。 个人感觉目前各个大中厂面试不好的地方是&#xff0c;都在朝着背面试八股文的方向发展&#xff08;曾…

Android Studio实现文件管理器

项目目录 一、项目概述二、开发环境三、详细设计1、布局设计2、程序运行时申请权限3、查看文件4、删除文件5、搜索文件6、新建文件 四、运行演示 一、项目概述 本次带来的文件管理器&#xff0c;能够对SD卡的目录进行管理。主要功能包括新建文件&#xff08;夹&#xff09;、查…

【shell】shell编程之函数

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、概述二、函数的查看和删除1.查看 declare2.删除 declare 三、函数的返回值1.return 返回值2.echo 返回值 四、函数的参数传入与变量范围五、函数的应用1.阶乘2.…

分库分表如何处理主键ID

当关系型数据库数据量过大时&#xff0c;通常会采用分库分表降低数据库查表压力。分库分表有多种&#xff0c;有分一个库多张分表额&#xff0c;有分多个库多张表的。一般分库分表使用ShardingSphere分表&#xff0c;建分片键等。但是分库分表之后&#xff0c;主键ID如何处理呢…

Goby 漏洞更新 |Telesquare TLR-2005Ksh 路由器 getUsernamePassword 信息泄露漏洞

漏洞名称&#xff1a;Telesquare TLR-2005Ksh 路由器 getUsernamePassword 信息泄露漏洞 English Name&#xff1a;Telesquare TLR-2005Ksh getUsernamePassword Information Disclosure CVSS core: 9.0 影响资产数&#xff1a;25826 漏洞描述&#xff1a; Telesquare Tlr…

MATLAB--控制语句--数组操作--符号运算--绘图--文件和数据的处理

控制语句 MATLAB 常用的控制语句有for, while, if, switch 等。 一、循环语句 通过循环控制语句&#xff0c;可以重复执行代码块。循环有两类&#xff1a;for 循环和while 循环。 for 循环是一组语句重复固定的&#xff0c;指定的次数&#xff0c;while 循环是满足条件执行。…

【鸿蒙应用ArkTS开发系列】- http网络库使用讲解和封装

目录 前言http网络库组件介绍http网络库封装创建Har Module创建RequestOption 配置类创建HttpCore核心类创建HttpManager核心类对外组件导出添加网络权限 http网络库依赖和使用依赖http网络库&#xff08;httpLibrary&#xff09;使用http网络库&#xff08;httpLibrary&#x…

“虐人的”双亲委派机制

这些问题&#xff0c;看看你能回答上来多少个&#xff1a; 1、什么是双亲委派&#xff1f; 2、为什么需要双亲委派&#xff0c;不委派有什么问题&#xff1f; 3、”父加载器”和”子加载器”之间的关系是继承的吗&#xff1f; 4、双亲委派是怎么实现的&#xff1f; 5、我能不能…

国外空间服务器是否有利于SEO优化?

​  购买国外空间服务器&#xff0c;这是许多人在做网站时会考虑到的选择。在国内&#xff0c;由于网络环境和限制&#xff0c;所以选择国外的空间似乎是一个不错的选择。但是&#xff0c;国外空间服务器是否对SEO优化有影响?这是一个值得讨论的问题。 1.服务器响应速度 如果…

跟着LearnOpenGL学习4--着色器

文章目录 一、前言二、GLSL2.1、着色器结构2.2、数据类型2.2.1、向量 2.3、输入与输出2.4、uniform2.5、更多属性 三、着色器类 一、前言 在之前绘制三角形的博文中&#xff0c;我们已经接触到了着色器&#xff0c;但是肯定有许多疑问&#xff0c;本文来详细了解一下着色器&am…

【17】SCI易中期刊推荐——计算机信息系统电子与电气(中科院4区)

💖💖>>>加勒比海带,QQ2479200884<<<💖💖 🍀🍀>>>【YOLO魔法搭配&论文投稿咨询】<<<🍀🍀 ✨✨>>>学习交流 | 温澜潮生 | 合作共赢 | 共同进步<<<✨✨ 📚📚>>>人工智能 | 计算机视觉…

Flink从入门到精通之-09状态编程

Flink从入门到精通之-09状态编程 Flink 处理机制的核心&#xff0c;就是“有状态的流式计算”。我们在之前的章节中也已经多次提到了“状态”&#xff08;state&#xff09;&#xff0c;不论是简单聚合、窗口聚合&#xff0c;还是处理函数的应用&#xff0c;都会有状态的身影出…

Spring Cloud第二季--Spring Cloud Bus

文章目录 Spring Clud Bus什么是总线基本原理 牛刀小试 Spring Clud Bus 在Spring Cloud学习–配置中心&#xff08;Config&#xff09;中实现了集中管理微服务配置、不同环境不同配置、运行期间也可动态调整、配置修改后可以自动更新的需求&#xff0c;但同时也有一个弊端&am…

服务器电源线:同为科技(TOWE)机房工程专用电源延长线

工程机房电源延长线 众所周知&#xff0c;世界上不同国家或地区所使用的插头、插座标准有所不同&#xff0c;在庞大复杂的数据中心计算集群内&#xff0c;需要电源供电才能正常工作&#xff0c;因此&#xff0c;服务器电源线是连接电源分配器和服务器的基本配件。在机房服务器…

如何通过优化服务器提升网站的SEO排名

在当今数字化时代&#xff0c;拥有一个高效、稳定的服务器对于网站的成功至关重要。然而&#xff0c;服务器不仅仅是为了提供网站的基本运行&#xff0c;它还可以对搜索引擎优化(SEO)起到关键作用&#xff0c;于是就有了多IP站群服务器这样对SEO非常友好的服务器。通过优化服务…