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

设计模式——原型模式(4)

一、写在前面

  • 创建型模式
    • 单例模式
    • 工厂方法模式
    • 抽象工厂模式
    • 原型模式
  • 建造者模式
  • 结构型模式
  • 行为型模式

二、介绍

  • 原型模式的思想是:用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型对象相同的新对象
  • 原型模式的克隆分为浅克隆和深克隆。
    • 浅克隆:创建一个新对象,新对象的属性和原来对象完全相同,对于非基本类型属性,仍指向原有属性所指向的对象的内存地址。
    • 深克隆:创建一个新对象,属性中引用的其他对象也会被克隆,不再指向原有对象地址。
  • Java中的Object类中提供了 clone() 方法来实现浅克隆。

三、浅克隆

  • 浅克隆存在的问题是:如果A克隆出B,在B中修改非基本类型属性的值,那么A中的属性也会被修改
  • 补充:使用浅克隆可以在需要创建大量对象的情况下使用,比如游戏里的一个一个小兵,使用clone方法明显比使用new方法的代价小,因为使用new要从头开始执行分配内存和构造函数,而对于clone来说,本质上是在做复制的工作,代价比new小很多

四、深克隆

  • 深克隆中需要用到对象流,对象流的本质是将这个对象的所有属性都序列化,即:即便这个对象里有非基本数据类型,那么这个非基本数据类型也会被序列化成基本数据类型,这种做法非常巧妙,运用了对象流处理的机制
public class CitationTest1 {public static void main(String[] args) throws Exception {Citation c1 = new Citation();Student stu = new Student("张三", "西安");c1.setStu(stu);//创建对象输出流对象ObjectOutputStream oos = new ObjectOutputStream(newFileOutputStream("C:\\Users\\Think\\Desktop\\b.txt"));//将c1对象写出到文件中oos.writeObject(c1);oos.close();//创建对象出入流对象ObjectInputStream ois = new ObjectInputStream(newFileInputStream("C:\\Users\\Think\\Desktop\\b.txt"));//读取对象Citation c2 = (Citation) ois.readObject();//获取c2奖状所属学生对象Student stu1 = c2.getStu();stu1.setName("李四");//判断stu对象和stu1对象是否是同一个对象System.out.println("stu和stu1是同一个对象?" + (stu == stu1));c1.show();c2.show();}
}

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

相关文章:

  • 使用机器学习边缘设备的快速目标检测
  • 安科瑞智能电表:先充值,后用电
  • Java项目:150 基于SSM+JSP的服装商城系统
  • 个人博客系统测试报告
  • 向日葵macOS定制包功能上线 轻松定制企业主被控软件
  • 如何实现数组和 List 之间的转换?
  • [含文档+PPT+源码等]精品基于springboot实现的原生Andriod心理健康辅导平台
  • 图算法之Bellman-Ford 算法(最短路径)详细解读
  • 图算法之拓扑排序(Topological Sort)详细解读
  • 【小鹅通-登录/注册安全分析报告】
  • MES系统功能优势解析:如何提升生产管理水平
  • Qt消息对话框
  • 20241011-国庆在川西格聂徒步的杂记
  • springboot feign-httpclient 连接池配置
  • 使用shutil库实现文件复制和移动的实用指南
  • TypeScript中装饰器的理解
  • 【软件工程】详细说说什么是PERT图
  • AI学习指南深度学习篇-变分自编码器的应用与扩展
  • Maven 中央仓库地址推荐
  • 微信App支付申请遭拒怎么办