单体模式的宗旨就是:使一个类只有一个实例。
我们可以将类的constructor的可见性设置为私有来避免创建多个实例。当其他类调用该类的时候,我们可以利用getInstance()之类的方法来返回给调用者该类的实例。
比如:
private Factory factory = null; public static Factory getFactory() { if (factory == null) { factory = new Facotry(); } return factory; } |
上面的例子实现了单体模式,但如果在多线程环境中采用此方式,仍然可能产生多个实例,最好的办法,用synchronized来控制Factory实例的生成。
public class Factory { private static Factory factory; private Factory() { } public static Factory getFactory() { synchronized(Factory.class) { if (factory == null) { factory = new Factory(); } return factory; } } } |