java中常見的設計模式有那些?

Java有23 種設計模式, 分三大類:
我們初級程序員常見的有:
單例模式 簡單工廠模式 代理模式(Proxy) 策略模式(Strategy) 策略模式(Strategy) 適配器模式

單例模式
特點:1.單例設計模式保證一個類只有一個實例。2.要提供一個訪問該類對象實例的全局訪問點。
對一些類來說,只有一個實例是很重要的。例如很多時候對於某個系統只需要擁有一個全局對象,這樣有利於我們協調系統的整體行爲。
兩種單例模式的實現
餓漢式:
對象預先加載,線程是安全的,在類創建好的同時對象生成,調用獲得對象實例的方法反應速度快。
懶漢式:
對象延遲加載,效率高,只有在使用的時候才實例化對象,但若設計不當線程會不安全,代碼相對於餓漢式複雜,第一次加載類對象的時候反應不快。
3 老漢 不能被修改 private static final DateFormatUtils utils = new DateFormatUtils()
4 雙重鎖 在方法有一個鎖,在裏面也有一個鎖,裏面的鎖是鎖.class文件的。雙重鎖是防止出現高併發。

單例模式主要有如下兩個優勢:

  1. 減少創建Java實例所帶來的系統開銷

  2. 便於系統跟蹤單個Java實例的生命週期、實例狀態等

簡單工廠模式
簡單工廠模式是由一個工廠對象決定創建出哪一種產品類的實例。簡單工廠模式是工廠模式家族中最簡單實用的模式,可以理解爲是不同工廠模式的一個特殊實現。

A實例調用B實例的方法,稱爲A依賴於B。如果使用new關鍵字來創建一個B實例(硬編碼耦合),然後調用B實例的方法。一旦系統需要重構:需要使用C類來代替B類時,程序不得不改寫A類代碼。而用工廠模式則不需要關心B對象的實現、創建過程。

使用簡單工廠模式的優勢:讓對象的調用者和對象創建過程分離,當對象調用者需要對象時,直接向工廠請求即可。從而避免了對象的調用者與對象的實現類以硬編碼方式耦合,以提高系統的可維護性、可擴展性。工廠模式也有一個小小的缺陷:當產品修改時,工廠類也要做相應的修改。

代理模式(Proxy)
代理模式是一種應用非常廣泛的設計模式,當客戶端代碼需要調用某個對象時,客戶端實際上不關心是否準確得到該對象,它只要一個能提供該功能的對象即可,此時我們就可返回該對象的代理(Proxy)。

Spring所創建的AOP代理就是這種動態代理。但是Spring AOP更靈活。

命令模式(Command)
某個方法需要完成某一個功能,完成這個功能的大部分步驟已經確定了,但可能有少量具體步驟無法確定,必須等到執行該方法時纔可以確定。(在某些編程語言如Ruby、Perl裏,允許傳入一個代碼塊作爲參數。但Jara暫時還不支持代碼塊作爲參數)。在Java中,傳入該方法的是一個對象,該對象通常是某個接口的匿名實現類的實例,該接口通常被稱爲命令接口,這種設計方式也被稱爲命令模式。

策略模式(Strategy)
策略模式用於封裝系列的算法,這些算法通常被封裝在一個被稱爲Context的類中,客戶端程序可以自由選擇其中一種算法,或讓Context爲客戶端選擇一種最佳算法——使用策略模式的優勢是爲了支持算法的自由切換。
使用策略模式可以讓客戶端代碼在不同的打折策略之間切換,但也有一個小小的遺憾:客戶端代碼需要和不同的策略耦合。爲了彌補這個不足,我們可以考慮使用配置文件來指定DiscountContext使用哪種打折策略——這就徹底分離客戶端代碼和具體打折策略類。

適配器模式
比如springmvc中的處理器適配器

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章