Java的常用設計模式詳解
引言
說起設計模式,很多程式語言的設計模式大同小異,而且設計模式很多,這裡介紹一下java的幾種常見的設計模式,其實設計模式是一個軟體的設計思想,從大型軟體架構出發,為了升級和維護方便,所以要降低依賴,降低耦合。
先說下設計模式原則:
1.開閉原則(Open Close Principle)
開閉原則是說對擴充套件開放,對修改關閉。在程式需要進行拓展的時候,不能去修改原有的程式碼,實現一個熱插拔的效果。所以一句話概括是:為了使程式的擴充套件性好,易於維護和升級。想要達到這樣的效果,我們需要使用介面和抽象類。
2.依賴倒轉原則(Dependence Inversion Principle)
這個是開閉原則的基礎,具體內容:針對介面程式設計,依賴於抽象而不依賴於具體。
3.介面隔離原則(Interface Segregation Principle)
使用多個隔離的介面,比使用單個介面要好,還是一個降低類之間的耦合度的意思。
4.迪米特法則(少知道原則)(Demeter Principle)
一個實體應當儘量少的與其他實體之間發生相互作用,使得系統功能模組相對獨立。
5.合成複用原則(Composite Reuse Principle)
原則是儘量使用合成/聚合的方式,而不是使用繼承。
Java的常用設計模式:
1、工廠方法模式(Factory Method)
常用的設計模式,是建立一個工廠類,對實現了同一介面的一些類進行例項的建立,將工廠類的方法定義為靜態方法,直接呼叫建立對應的類例項。
2.單例模式(Singleton)
單例物件(Singleton)是一種常用的設計模式。在Java應用中,單例物件能保證在一個JVM中,該物件只有一個例項存在。這樣的模式有幾個好處:
- 某些類建立比較頻繁,對於一些大型的物件,這是一筆很大的系統開銷。
- 省去了new操作符,降低了系統記憶體的使用頻率,減輕GC壓力。
- 有些類如交易所的核心交易引擎,控制著交易流程,如果該類可以建立多個的話,系統完全亂了,所以只有使用單例模式,才能保證核心交易伺服器獨立控制整個流程。
- 以達到資源共享,整個程式共享一個物件的資源。
建立方法如下:
public class Singleton { /* 持有私有靜態例項,防止被引用,此處賦值為null,目的是實現延遲載入 */ private static Singleton instance = null; /* 私有構造方法,防止被例項化 */ private Singleton() { } /* 靜態工程方法,建立例項 */ public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } /* 如果該物件被用於序列化,可以保證物件在序列化前後保持一致 */ public Object readResolve() { return instance; } }
3.代理模式(Proxy)
其實每個模式名稱表明了該模式的作用,代理模式是多一個代理類出來,替原物件進行一些操作。
代理模式的應用場景:
如果已有的方法在使用的時候需要對原有的方法進行改進,此時有兩種辦法:
- 修改原有的方法來適應。這樣違反了“對擴充套件開放,對修改關閉”的原則。
- 是採用一個代理類呼叫原有的方法,且對產生的結果進行控制。這種方法是代理模式。
使用代理模式,可以將功能劃分的更加清晰,有助於後期維護!
程式碼如下:
public interface Sourceable { public void method(); } public class Source implements Sourceable { @Override public void method() { System.out.println("the original method!"); } } public class Proxy implements Sourceable { private Source source; public Proxy(){ super(); this.source = new Source(); } @Override public void method() { before(); source.method(); atfer(); } private void atfer() { System.out.println("after proxy!"); } private void before() { System.out.println("before proxy!"); } }