[設計模式][面向對象]單例模式
阿新 • • 發佈:2019-05-08
inversion 使用 實例化 占用 開閉 final spa logs 修改
設計模式遵循的原則有6個:
1、開閉原則(Open Close Principle)
對擴展開放,對修改關閉。
2、裏氏代換原則(Liskov Substitution Principle)
只有當衍生類可以替換掉基類,軟件單位的功能不受到影響時,基類才能真正被復用,而衍生類也能夠在基類的基礎上增加新的行為。
3、依賴倒轉原則(Dependence Inversion Principle)
這個是開閉原則的基礎,對接口編程,依賴於抽象而不依賴於具體。
4、接口隔離原則(Interface Segregation Principle)
使用多個隔離的借口來降低耦合度。
5、迪米特法則(最少知道原則)(Demeter Principle)
一個實體應當盡量少的與其他實體之間發生相互作用,使得系統功能模塊相對獨立。
6、合成復用原則(Composite Reuse Principle)
原則是盡量使用合成/聚合的方式,而不是使用繼承。繼承實際上破壞了類的封裝性,超類的方法可能會被子類修改。
[單例模式]
單例設計模式所解決的實際問題:保證類的對象在內存中唯一。
特點:構造方法私有化,外部無法通過構造方法實例化類
1.餓漢式(基本實現代碼)
class Student { private static final Student s = newStudent(); private Student(){} //獲取類的唯一實例 public static Student getInstance() //約定的命名規範 /getInstance/ { return s; } }
優點:餓漢模式天生是線程安全的,使用時沒有延遲。
缺點:啟動時即創建實例,啟動慢,有可能造成資源浪費。
2.懶漢式
class Student { private static Student s=null; private Single(){}public static Student getInstance() { if(s==null) s=new Student(); return s; } }
優點:懶加載啟動快,資源占用小,使用時才實例化,無鎖。
缺點:非線程安全。
3.Holder模式
public class Singleton { /** * 類級的內部類,也就是靜態的成員式內部類,該內部類的實例與外部類的實例 * 沒有綁定關系,而且只有被調用到才會裝載,從而實現了延遲加載 */ private static class SingletonHolder{ //靜態初始化器,由JVM來保證線程安全 private static Singleton instance = new Singleton(); } //私有化構造方法 private Singleton(){ } public static Singleton getInstance(){ return SingletonHolder.instance; } }
優點:將懶加載和線程安全完美結合的一種方式(無鎖)。(推薦)
[設計模式][面向對象]單例模式