單例模式之新的想法
前幾天被問到了單例模式對構造函數有什麽要求嗎?答曰:沒什麽要求吧?
回來查了下詳細的資料才發現,原來單例模式的實現private 的一個構造函數,目的是不讓這個單例的類可以new一個對象出來。
思考了下,事實上不加應該問題也不大,畢竟假設代碼上都是一個人在寫的話,事實上這樣的問題還是能夠規避的。可是又發現了其它新的一些想法。
先說下曾經寫的單例吧,事實上也非常easy,無非就是一個private static然後用getInstance返回,如今感覺想法確實有點幼稚。
上面說的那個private 的構造函數就不提了。個人感覺有當然最好,可是無也未嘗不可。
貼一段spring的源代碼看看spring的sigleton怎樣寫的先
/** * Return the (raw) singleton object registered under the given name. * <p>Checks already instantiated singletons and also allows for an early * reference to a currently created singleton (resolving a circular reference). * @param beanName the name of the bean to look for * @param allowEarlyReference whether early references should be created or not * @return the registered singleton object, or [email protected]
依照spring的做法,對於配置文件裏的類進行註冊到singletonObjects 中
代碼例如以下:
/** * Add the given singleton object to the singleton cache of this factory. * <p>To be called for eager registration of singletons. * @param beanName the name of the bean * @param singletonObject the singleton object */ protected void addSingleton(String beanName, Object singletonObject) { synchronized (this.singletonObjects) { this.singletonObjects.put(beanName, (singletonObject != null ?singletonObject : NULL_OBJECT)); this.singletonFactories.remove(beanName); this.earlySingletonObjects.remove(beanName); this.registeredSingletons.add(beanName); } }
然後在使用的時候依據singletonObjects 進行查詢並返回相應的對象。
單例模式之新的想法