android 克隆对象,克隆会破坏单例对象吗?
假設(shè)有這樣一個場景,如果復(fù)制的目標(biāo)對象恰好是單例對象,那會不會破壞單例對象呢?
當(dāng)然,我們在已知的情況下肯定不會這么干,但如果發(fā)生了意外怎么辦?不防來修改一下代碼。
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;
}
}
}
我們把構(gòu)造方法私有化,并且提供 getInstance() 方法。編寫客戶端測試代碼如下。
public static void main(String[] args) {
//創(chuàng)建原型對象
ConcretePrototype protoType = ConcretePrototype.getInstance();
//復(fù)制原型對象
ConcretePrototype cloneType = protoType.clone();
System.out.println("原型對象和克隆對象比較"+(protoType==cloneType));
}
運行結(jié)果如下所示:
原型對象和克隆對象比較false
從運行結(jié)果來看,確實創(chuàng)建了兩個不同的對象。實際上防止復(fù)制破壞單例對象的解決思路非常簡單,禁止復(fù)制便可。那么我們的單例類不實現(xiàn) Cloneable 接口,要么我們重寫 clone() 方法,在 clone() 方法中返回單例對象即可,具體代碼如下。
@Override
public ConcretePrototype clone() {
return instance;
}
總結(jié)
以上是生活随笔為你收集整理的android 克隆对象,克隆会破坏单例对象吗?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 余额宝利息为什么越来越低
- 下一篇: unity android sd卡路径,