1、必须要加同步关键字,否则多线程会出现创建多个单例的情况
2、由于同步关键字会使效率降低,可以用双重锁验证,不过单例对象要用volatile修饰,否则会报错
public class BaohanMoshi { private static BaohanMoshi b = null; private BaohanMoshi(){} synchronized public BaohanMoshi getInstance(){ if(b==null){ b = new BaohanMoshi(); } return b; } }注意和工厂模式的区别,这个更注重过程细节,工厂模式更宏观
利用java的克隆,分为浅克隆和深克隆
浅克隆很简单不演示了,下面是深克隆示例
public class Qiche implements Cloneable , Serializable { private String name; private String color; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } public Object deepClone() throws Exception{ ByteArrayOutputStream bo = new ByteArrayOutputStream(); ObjectOutputStream oo = new ObjectOutputStream(bo); oo.writeObject(this); ByteArrayInputStream bi = new ByteArrayInputStream(bo.toByteArray()); ObjectInputStream oi = new ObjectInputStream(bi); return oi.readObject(); } }