java设计模式(四)原型模式(Prototype Pattern)

news2024/11/20 6:27:42

1、模式介绍:

原型模式(Prototype Pattern)是一种创建型设计模式,它允许对象在创建新实例时通过复制现有实例而不是通过实例化新对象来完成。这样做可以避免耗费大量的资源和时间来初始化对象。原型模式涉及一个被复制的原型对象,在这个模式中,要创建的对象通过请求原型对象来进行复制。

2、应用场景:

需要创建大量相似对象:当需要创建大量具有相似属性的对象时,使用原型模式可以避免重复的初始化工作,提高性能。
对象的创建开销较大:如果对象的创建开销很大,例如读取数据库或文件操作,使用原型模式可以节省时间。
动态配置对象:当需要动态配置对象时,可以先创建一个原型对象,然后通过复制来生成新的对象并根据需要进行修改。

3、优点:

减少对象初始化开销:避免了重复的初始化工作,提高了对象创建的效率。
简化对象的创建:无需关心对象的具体创建过程,只需通过复制原型对象来生成新对象。
动态配置对象:可以通过复制原型对象来动态配置新对象,增加灵活性。

4、缺点:

深拷贝问题:原型模式需要确保对象的属性都能被正确复制,特别是对于复杂对象来说,需要注意深拷贝和浅拷贝的问题。
类必须实现克隆接口:要使用原型模式,类必须实现克隆方法,这在某些情况下可能是不可行的。

5、代码实现:

/**
 * 实现 Cloneable 接口的原型类
 *
 * @author FM_南风
 * @date 2024/6/23
 */
@Data
public class Shape  implements Cloneable {
    private String type;

    @Override
    public Shape clone() {
        try {
            return (Shape) super.clone();
        } catch (CloneNotSupportedException e) {
            return null;
        }
    }
}


/**
 * 具体原型类
 *
 * @author FM_南风
 * @date 2024/6/23
 */
public class Rectangle extends Shape {
    public Rectangle() {
        setType("Rectangle原型类");
    }
}


/**
 * 具体原型类
 *
 * @author FM_南风
 * @date 2024/6/23
 */
public class Circle extends Shape {
 public Circle() {
  setType("Circle原型类");
 }
}

/**
 * 应用
 *
 * @author FM_南风
 * @date 2024/6/23
 */
public class PrototypeClient {
 public static void main(String[] args) {
  Shape rectangle = new Rectangle();
  Shape circle = new Circle();

  // 使用原型对象创建新对象
  Shape clonedRectangle = rectangle.clone();
  Shape clonedCircle = circle.clone();

  System.out.println(clonedRectangle.getType()); 
  System.out.println(clonedCircle.getType()); 
 }
}

6、结果展示:

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

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

相关文章

【机器学习】在【R语言】中的应用:结合【PostgreSQL数据库】的【金融行业信用评分模型】构建

目录 1.数据库和数据集的选择 1.准备工作 2.PostgreSQL安装与配置 3.R和RStudio安装与配置 2.数据导入和预处理 1.连接数据库并导入数据 1.连接数据库 2.数据检查和清洗 1.数据标准化 2.拆分训练集和测试集 3.特征工程 1.生成新特征 2.特征选择 4.模型训练和评估…

【浦语开源】深入探索:大模型全链路开源组件 InternLM Lagent,打造灵笔Demo实战指南

一、准备工作: 1、环境配置: pip、conda换源: pip临时换源: pip install -i https://mirrors.cernet.edu.cn/pypi/web/simple some-package# 这里的“https://mirrors.cernet.edu.cn/pypi/web/simple”是所换的源,…

2024广东省职业技能大赛云计算赛项实战——构建CICD

构建CI/CD 前言 题目如下: 构建CI/CD 编写流水线脚本.gitlab-ci.yml触发自动构建,具体要求如下: (1)基于镜像maven:3.6-jdk-8构建项目的drone分支; (2)构建镜像的名称&#xff1a…

【threejs】火焰特效制作

2024-06-26 08-57-16火焰 shader 来源 //shadertory:https://www.shadertoy.com/view/ctVGD1//shadertory:https://www.shadertoy.com/view/ml3GWs 代码 import { DoubleSide, ShaderChunk, ShaderMaterial } from "three";export default fu…

嵌入式EMC之TVS管

整理一些网上摘抄的笔记: TVS管认识: TVS的Vc要比,DCDC的最大承受电压要小

mysql workbench使用schema视图导出表和列结构到excel

目的:导出所有表和列的名字和注释 很多时候没有正规的数据库文档,为了快速交流啊,需要一个快捷的基础。数据库建表的时候可能有注释,也可能没有注释。有当然好,查看注释就能清楚很多,没有的话最好一个一个补…

高效文件分类管理:快速将不同类型文件素材归类到专属文件夹,告别混乱,让工作更高效!

在数字化时代,我们每天都会产生大量的文件素材,从图片、文档到音频、视频,种类繁多,数量庞大。如果这些文件没有得到有效的管理和归类,不仅会让我们的工作变得混乱无序,还会影响我们的工作效率。那么&#…

文华WH7主图多空预警系统指标公式源码

RSV:(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;//收盘价与N周期最低值做差,N周期最高值与N周期最低值做差,两差之间做比值定义为RSV K:SMA(RSV,3,1);//RSV的移动平均 D:SMA(K,3,1);//K值的移动平均 DIFF : EMA(CLOSE,12) - EMA(CLOSE,26); D…

python-17-零基础自学python-

学习内容:《python编程:从入门到实践》第二版 知识点: 类、子类、继承、调用函数 练习内容: 练习9-6:冰激凌小店 冰激凌小店是一种特殊的餐馆。编写一个名为IceCreamStand的类,让它继承为完成练习9-1或…

spring原理篇

第三方bean默认为方法名 自动配置 自动配置的原理 springboot的自动配置原理 首先是从 SpringBootApplication这个注解出发 有一个ComponentScan()默认扫描同级包及其子包 第二个注解是springbootconfiguration 声明当前类是一个配置类 第三个是核心 enableAutoConfigurati…

HRSC2016 :推动光学遥感图像细粒度船舶检测的创新引擎(目标检测)

亲爱的读者们,您是否在寻找某个特定的数据集,用于研究或项目实践?欢迎您在评论区留言,或者通过公众号私信告诉我,您想要的数据集的类型主题。小编会竭尽全力为您寻找,并在找到后第一时间与您分享。 摘要&a…

华为OD机试【高矮个子排队】(java)(100分)

1、题目描述 现在有一队小朋友,他们高矮不同,我们以正整数数组表示这一队小朋友的身高,如数组{5,3,1,2,3}。 我们现在希望小朋友排队,以“高”“矮”“高”“矮”顺序排列,每一个“高”位置的小朋友要比相邻的位置高或…

pp 学习一 生产模块主数据

生产成本:原材料是什么,价格多少,人工耗费时间,以及其他的费用 离散制造:有生产订单。工序是分开的(可以停) 重复制造:没有生产订单(可能有客户下达的任务单或者计划订…

昇思MindSpore基本介绍

昇思MindSpore是一个全场景深度学习框架,旨在实现易开发、高效执行、全场景统一部署三大目标。 其中,易开发表现为API友好、调试难度低;高效执行包括计算效率、数据预处理效率和分布式训练效率;全场景则指框架同时支持云、边缘以…

学习TTS遇到的问题2 什么是TCN模型

学习TTS遇到的问题2 什么是TCN模型 什么是TCN模型怎么理解 TCN中的 dilation?什么是 Dilation具体例子数学表达作用例子代码示例 什么是TCN模型 https://juejin.cn/post/7262269863343079479 https://blog.csdn.net/weixin_57726558/article/details/132163074 由下…

【计算机网络仿真】b站湖科大教书匠思科Packet Tracer——实验9 IPv4地址 — 划分子网

一、实验目的 1.学习划分子网的方法; 2.验证子网掩码的作用。 二、实验要求 1.使用Cisco Packet Tracer仿真平台; 2.观看B站湖科大教书匠仿真实验视频,完成对应实验。 三、实验内容 1.构建网络拓扑; 2.划分子网; …

涵盖多项功能的文件外发系统,了解一下

伴随着业务范围的不断扩大,信息化的迅速发展,企业与客户、供应商等合作伙伴之间的文件交换也愈加频繁,尤其涉及到核心数据,像核心技术、设计图纸等敏感数据,对其的保护也是越发重视。文件外发系统,应运而生…

CRS-1621: The IPMI configuration data CRS-1617: The information CRS-8503

环境介绍 19c rac 两个节点 现象描述: 2个节点的rac,只有节点1正常,节点2启动的时候,一直卡在 这里不动,当将节点1关闭后,再次重启的时候,也是卡在这里,最终会报错 在cssd日志中有…

.NET 一款系统遥测实现权限维持的工具

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

《山西化工》是什么级别的期刊?是正规期刊吗?能评职称吗?

问题解答 问:《山西化工》是不是核心期刊? 答:不是,是知网收录的第一批认定学术期刊。 问:《山西化工》级别? 答:省级。主办单位:山西省工业和信息化厅 主管单位:山…