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

23种设计模式之原型模式

目录

什么是原型模式

为什么使用原型模式 

原型模式的基本结构 

 原型模式的实现步骤

实现代码(含注释) 

使用场景 


什么是原型模式

原型模式是一种创建型设计模式,该模式的核心思想是基于现有的对象创建新的对象,而不是从头开始创建。在原型模式中,通常有一个原型对象,它被用作创建新对象的末班。新对象通过复制原型对象的属性和状态来创建,而无需知道具体的创建细节。

为什么使用原型模式 

每次创建对象时都会消耗资源,而通过原型模式就可以复制现有的对象来迅速克隆一个新的对象,可以降低对象创建的成本。

原型模式的基本结构 

实现原型模式需要结合原型对象声明一个克隆方法clone(),执行该方法会创建一个当前类的新对象,并将原始对象中的成员变量复制到新生成的对象中,而不必实例化。并且在这个过程中只需要调用原型对象的克隆方法,而无需知道 原型对象的具体类型。

原型对象主要包括两个重点模块:

  • Prototype抽象原型接口:声明一个克隆的方法clone
  • ConcretePrototype具体原型类:实现clone方法,复制当前对象并返回一个新对象

 原型模式的实现步骤

  1. 创建一个抽象类或者接口,声明一个克隆方法clone
  2. 实现具体原型类,重写克隆方法
  3. 客户端中实例化具体原型类的对象,并调用克隆方法来创建新的对象

实现代码(含注释) 

//原型模式
//1.定义抽象原型类
abstract class Prototype implements Cloneable{@Overridepublic abstract Prototype clone();
}
//2.实现具体原型类
class ConcretePrototype extends Prototype{private String data;public ConcretePrototype(String data){this.data=data;}@Overridepublic Prototype clone() {return new ConcretePrototype(this.data);}public String getData(){return data;}
}
//3.客户端代码
public class Client {public static void main(String[] args) {
//       实例化具体原型对象Prototype original=new ConcretePrototype("Original Data");
//        克隆原型对象Prototype clone=original.clone();
//        输出克隆的数据System.out.println("Clone Data:"+((ConcretePrototype)clone).getData());}
}

使用场景 

相比于直接实例化对象,通过原型模式复制对象可以减少资源消耗,提⾼性能,尤其在对象的创建过程复杂或对象的创建代价较大的情况下。当需要频繁创建相似对象、并且可以通过克隆避免重复初始化⼯作的场景时可以考虑使用原型模式,在克隆对象的时候还可以动态地添加或删除原型对象的属性,创造出相似但不完全相同的对象,提高了灵活性。
http://www.lryc.cn/news/300005.html

相关文章:

  • 揭秘Angular世界的奥秘:全面提升你的前端开发技能!
  • 【开源】SpringBoot框架开发企业项目合同信息系统
  • 高斯伪谱C++封装库开源!
  • Spring + Tomcat项目中nacos配置中文乱码问题解决
  • Unity SRP 管线【第十讲:SRP/URP 图形API】
  • 使用playwright进行自动化端到端测试
  • ES实战-相关性搜索
  • MQTT的学习与应用
  • 编译原理实验1——词法分析(python实现)
  • C语言——oj刷题——模拟实现库函数strlen
  • 对进程与线程的理解
  • 「数据结构」线性表
  • GEE:关于在GEE平台上进行回归计算的若干问题
  • Vivado -RAM
  • 备战蓝桥杯---图论之最短路dijkstra算法
  • C#系列-C#实现秒杀功能(14)
  • Java ‘Elasticsearch‘ 操作
  • 【AI视野·今日NLP 自然语言处理论文速览 第七十八期】Wed, 17 Jan 2024
  • 实验5-4 使用函数计算两点间的距离
  • 【JavaEE】_JavaScript(Web API)
  • ARM交叉编译搭建SSH
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • 回归预测模型:MATLAB多项式回归
  • 「计算机网络」数据链路层
  • 【Linux】Ubuntu 22.04 升级 nodejs 到 v18
  • 当go get获取不到软件包时
  • 全网最详细解法|同济大学|高等数学|第八版|习题1-5
  • 可视化工具:将多种数据格式转化为交互式图形展示的利器
  • [嵌入式AI从0开始到入土]14_orangepi_aipro小修补含yolov7多线程案例
  • 机器学习、深度学习、强化学习、迁移学习的关联与区别