能源网站建设,做外贸出口的网站,赣州市建设局网站,网站建设公司上海做网站公司排名假设有这样一个场景#xff0c;如果复制的目标对象恰好是单例对象#xff0c;那会不会破坏单例对象呢#xff1f;当然#xff0c;我们在已知的情况下肯定不会这么干#xff0c;但如果发生了意外怎么办#xff1f;不防来修改一下代码。public class ConcretePrototype imp…假设有这样一个场景如果复制的目标对象恰好是单例对象那会不会破坏单例对象呢当然我们在已知的情况下肯定不会这么干但如果发生了意外怎么办不防来修改一下代码。public class ConcretePrototype implements Cloneable {private static ConcretePrototype instance new ConcretePrototype();private ConcretePrototype() {}public static ConcretePrototype getInstance() {return instance;}Overridepublic 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(原型对象和克隆对象比较(protoTypecloneType));}运行结果如下所示原型对象和克隆对象比较false从运行结果来看确实创建了两个不同的对象。实际上防止复制破坏单例对象的解决思路非常简单禁止复制便可。那么我们的单例类不实现 Cloneable 接口要么我们重写 clone() 方法在 clone() 方法中返回单例对象即可具体代码如下。Overridepublic ConcretePrototype clone() {return instance;}