单体模式探讨(原创) Singleton模式定义:单体模式既从全局的观点看只有一个对象。 值得注意的是如果你的Singleton继承自 Object,你可以不用考虑clone函数的问题,因为它是protected的,但是如果你是从某个有public的clone函数对象继承来的单体对象,你应该重载 clone函数并抛出CloneNotSupportedException错误。 另外,还有一个lazy initialization的问题,有些同行喜欢lazy initialization,那么一定要注意需要使用synchronized。否则,有可能获得多个实例//: singleton:SingletonPattern.javaimport junit.framework.*; final class Singleton { private static Singleton s = new Singleton(47); private int i; private Singleton(int x) { i = x; } public static Singleton getReference() { return s; } public int getValue() { return i; } public void setValue(int x) { i = x; }} public class SingletonPattern extends TestCase { public void test() { Singleton s = Singleton.getReference(); String result = "" + s.getValue(); System.out.println(result); assertEquals(result, "47"); Singleton s2 = Singleton.getReference(); s2.setValue(9); result = "" + s.getValue(); System.out.println(result); assertEquals(result, "9"); try { // Can't do this: compile-time error. // Singleton s3 = (Singleton)s2.clone(); } catch(Exception e) { throw new RuntimeException(e); } } public static void main(String[] args) { junit.textui.TestRunner.run(SingletonPattern.class); }} ///:~ 最后,我们可以由单体模式引申出一个对象池的问题的,不是一个对象,而是只有最多N个对象的问题。这个也就是对象池,可以看作是单体对象的一个变化。