假设有这样一个场景,如果复制的目标对象恰好是单例对象,那会不会破坏单例对象呢?

当然,我们在已知的情况下肯定不会这么干,但如果发生了意外怎么办?不防来修改一下代码。

public class ConcretePrototype implements Cloneable {

private static ConcretePrototype instance = new ConcretePrototype();

private ConcretePrototype() {

}

public static ConcretePrototype getInstance() {

return instance;

}

@Override

public ConcretePrototype clone() {

try {

return (ConcretePrototype) super.clone();

} catch (CloneNotSupportedException e) {

return null;

}

}

}

我们把构造方法私有化,并且提供 getInstance() 方法。编写客户端测试代码如下。

public static void main(String[] args) {

//创建原型对象

ConcretePrototype protoType = ConcretePrototype.getInstance();

//复制原型对象

ConcretePrototype cloneType = protoType.clone();

System.out.println("原型对象和克隆对象比较"+(protoType==cloneType));

}

运行结果如下所示:

原型对象和克隆对象比较false

从运行结果来看,确实创建了两个不同的对象。实际上防止复制破坏单例对象的解决思路非常简单,禁止复制便可。那么我们的单例类不实现 Cloneable 接口,要么我们重写 clone() 方法,在 clone() 方法中返回单例对象即可,具体代码如下。

@Override

public ConcretePrototype clone() {

return instance;

}

android 克隆对象,克隆会破坏单例对象吗?相关推荐

  1. 2021年大数据常用语言Scala(二十九):scala面向对象 单例对象

    目录 单例对象 定义object - 掌握 伴生对象 - 掌握 apply方法 - 掌握 main方法 单例对象 Scala中没有static关键字,但是它支持静态 如果要定义静态的东西,统统定义到o ...

  2. Scala单例对象(伴生对象)

    概念 Scala语言是完全面向对象的语言,所以并没有静态的操作(即在Scala中没有静态的概 念).但是为了能够和Java语言交互(因为Java中有静态概念),就产生了一种特殊的对象 来模拟类对象,该 ...

  3. scala什么是单例对象_Scala单例和伴侣对象

    scala什么是单例对象 Scala中的单例对象 (Singleton objects in Scala) Scala being an object-oriented programming lan ...

  4. 单例对象会被jvm的gc时回收吗_【PHP设计模式】单例模式

    前言 设计模式是我们开发过程中的重中之重,所以今天小编就来学习设计模式中的单例模式. 单例模式 <?phpclass Singleton { /*** 定义一个静态变量保存已经实例化的对象* * ...

  5. 关于“如何破坏单例“我说了好几种方式,面试官却说:我其实随便问问,没想到你真会

    单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.是一种创建型设计模式.他的定义为:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 单例模式一般体现在类声明中 ...

  6. 关于如何破坏单例我说了好几种方式,面试官却说:我其实随便问问,没想到你真会...

    单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.是一种创建型设计模式.他的定义为:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 单例模式一般体现在类声明中 ...

  7. 面试官:Spring创建好的单例对象存在线程安全问题吗?

    点击关注公众号,实用技术文章及时了解 来源:blog.csdn.net/jdk_wangtaida/ article/details/88738228 前言 这是我在一次面试中被问到过的问题,但是当时 ...

  8. Kotlin入门(18)利用单例对象获取时间

    前面介绍了,使用扩展函数可以很方便地扩充数组Array的处理功能,例如交换两个数组元素.求数组的最大元素等等.那么除了数组之外,日期和时间的相关操作,也是很常见的,比如获取当前日期,获取当前时间.获取 ...

  9. 【scala】类的定义和单例对象

    一.类的定义 Scala类的定义跟JAVA中类的定义基本是一样的. 示例 class ChecksumAccumulator{var sum = 0;//Scala默认关键字为publicprivat ...

最新文章

  1. DllMain中不当操作导致死锁问题的分析--加载卸载DLL与DllMain死锁的关系
  2. celery的初次使用
  3. LVS负载均衡的简单实现
  4. .net framework 4.0 安装失败解决办法
  5. C#开发笔记之12-如何用C#统计子字符串出现的次数?
  6. java String类常用的方法
  7. 超级楼梯[HDU2041]
  8. 织梦缩略图自动补齐绝对路径_织梦生成文章内容缩略图时自动加上绝对路径教程...
  9. 5月30日任务 访问日志不记录静态文件、访问日志切割、静态元素过期时间
  10. 小黑T61P 挂了,显卡门,维修经历跟踪
  11. Eclipse搭建Android开发环境并运行Android项目 (详细)
  12. build lavas 失败_vue lavas的项目在IE下显示空白
  13. HTTP长连接和WebSocket长连接的区别
  14. correl函数相关系数大小意义_EXCEL中的相关系数能说明什么?
  15. 基于FPGA:运动目标检测(补充仿真结果,可用毕设)
  16. SAP MM-MB52 物料库存查询简单操作
  17. 惯性导航(IMU)误差分析
  18. 医生还未失业,IBM Watson 已跌入深渊
  19. JavaSSM-Mybatis框架使用
  20. 股市和庞氏骗局的类同之处

热门文章

  1. 云评测 | OpenStack智能运维解决方案 @文末有福利!
  2. blazeds调用java_Flex使用Blazeds与Java交互及自定义对象转换详解(转)
  3. ajax返回来总是html,ajax返回类型
  4. 自动生成考勤表_可自动变色的考勤表,逢周末自动更新,你会制作吗?
  5. Vue-router 的使用 (vue3.x版本)
  6. centos7 /etc/profile 文件模板
  7. 前后端敏感数据加密方案及实现_01
  8. 设置axios默认访问前缀
  9. form表单提交,后台实体类接收转义问题
  10. html边框大一点,CSS3 框大小(box-sizing)