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

JAVA设计模式之【原型模式】

原型模式.png

快速构建对象方法:

使用简单工厂将get,set封装到某个方法中(Client类)
JDK提供实现Cloneable接口实现快速复制

1 类图

2 适用场景

1、类初始化消耗资源较多。
2、new 产生的一个对象需要非常繁琐的过程(数据准备、访问权限等)
3、构造函数比较复杂。
4、循环体中生产大量对象时。

3 原型模式案例

BeanUtils.copy();
JSON.parseObject()

4 深浅克隆

4.1 浅克隆

创建一个新对象,新对象的属性和原来对象完全相同,对于非基本类型属性,仍指向原有属性所指向的对象的内存地址。

4.1.2 浅克隆代码案例

必须让目标类实现Cloneable接口,重写java.lang.Object的clone()

@Override
public Object clone() throws CloneNotSupportedException {return super.clone();
}

4.2 深克隆

创建一个新对象,属性中引用的其他对象也会被克隆,不再指向原有对象地址。

4.2.2 深克隆代码案例

@Override
public Object clone() throws CloneNotSupportedException {try {ByteArrayOutputStream out = new ByteArrayOutputStream();ObjectOutputStream oos = new ObjectOutputStream(out);oos.writeObject(this);oos.close();//从内存中取出byte[] bb = out.toByteArray();ByteArrayInputStream in = new ByteArrayInputStream(bb);ObjectInputStream ois = new ObjectInputStream(in);Object clone = ois.readObject();ois.close();return clone;} catch (Exception e) {throw new RuntimeException(e);}
}

4.3 克隆会破坏单例模式

4.3.1 解决方式

要么单例类不实现Cloneable 接口;要么重写 clone()方法,在 clone 方法中返回单例对象即可。

@Override
protected Object clone() throws CloneNotSupportedException {return this.deepClone();
}

绿色软件搜索【谷丘Coder】后台发送【原型模式】获取笔记资料与思维导图


http://www.mrgr.cn/news/11675.html

相关文章:

  • 通用大模型应用研究重点六:AgentOS
  • 基于UDP/TCP的 c/s 通信模型
  • 学习Redis踩坑记录
  • 读书学习笔记 # Datawhale X 李宏毅苹果书 AI夏令营
  • linux三种网络方式、磁盘分区、虚拟机克隆、虚拟机快照
  • PDF-Extract-Kit提取PDF数据
  • 【线程安全】ReentrantLock和synchronized的使用示例——言简意赅
  • [论文笔记] megatron 大模型超参搜索pipeline
  • 博弈论详解 2(SG函数 和 SG定理)
  • 【负载均衡式在线OJ】oj_server模块
  • DNS详解
  • 国际业务产品系统应用架构设计
  • 零工市场小程序应该有什么功能?
  • 没有大海也能冲浪-带你学习尾波冲浪
  • 打卡学习Python爬虫第五天|使用Xpath爬取豆瓣电影评分
  • 流媒体协议分析
  • npm install报错解决记录
  • MySQL空间管理:查询、优化与碎片清理
  • 毕 业 设 计(论 文)远程接入企业网络规划与设计
  • 【Docker】安装Docker环境遇到的坑(VirtualBox)