設計模式複習

2022-09-08 08:21:18 字數 3097 閱讀 8648

懶漢式載入方式:

在呼叫getinstance判斷為null進行第一次初始化,通過加鎖實現多執行緒安全(雙重檢驗鎖機制,兩次判斷null,加類鎖,上volatile修飾物件防止指令重排

餓漢式載入方式:

不需要加鎖即可執行緒安全,但類載入時就初始化,浪費記憶體(基於classloader機制)

簡單工廠模式:

專門定義乙個類來負責建立其他類的例項,被建立的例項通常都具有共同的父類。

工廠模式:

簡單工程模式在加入乙個新產品,需要重寫工廠類,不符合開閉原則

使用具體工廠建立具體產品,定義工廠父類。定義工廠和產品都需要抽象層

抽象工廠模式:

產品族中的多個物件被設計成一起工作,工廠可以建立乙個產品族的所有物件,比如海爾工廠可以建立所有海爾產品

解決不相容的介面問題,介面卡依賴已有的物件,實現想要的目標介面

關鍵:介面卡使用目標介面,現有物件使用介面卡。

依據樹形結構來組合物件,用來表示部分以及整體層次。組合模式使使用者對單個物件和組合物件的使用具有一致性

關鍵:樹枝內部組合該介面,並且含有內部屬性 list< component>與add,remove方法操作

在客戶端和複雜系統之間再加一層,降低訪問複雜系統的複雜性,只需要訪問這個介面而不需要知道子系統的內部細節。如j**a的mvc三層開發模式

關鍵:在外觀類上定義好依賴關係和呼叫順序

使用**物件來代替對真實物件(real object)的訪問,這樣就可以在不修改原目標物件的前提下,對原有物件加以控制

靜態**:

aop動態**(jdk 動態**、cglib 動態**)

jdk 動態**只能**實現了介面的類,而 cglib 通過生成乙個被**類的子類

1、和介面卡模式的區別:介面卡模式主要改變所考慮物件的介面,而**模式不能改變所**類的介面。

2、和裝飾器模式的區別:裝飾器模式為了增強功能,而**模式是為了加以控制。

向乙個現有的物件新增新的功能,同時又不改變其結構,比生成子類更加靈活。

shapedecoratorredcircle= newredshapedecorator(newcircle());

抽象裝飾類的構造方法對component類初始化,增加其功能。

關鍵:1、component 類充當抽象角色,不應該具體實現。

2、抽象修飾類引用和繼承 component 類,具體修飾類重寫父類方法。

定義物件間的一對多的依賴關係,使得每當乙個物件狀態發生改變,其相關依賴物件都會得到通知並更新

關鍵:在抽象subject類中有乙個list存放觀察者,更新時呼叫notify()通知所有觀察者

定義一系列演算法,將每乙個演算法封裝起來,並讓它們可以相互替換。

關鍵:演算法實現了同乙個介面,從而方便呼叫

基於繼承的**復用技術,在抽象類中定義乙個演算法的骨架,將一些步驟通過抽象方法的宣告,延遲到子類中。

上圖的模板方法定義了演算法的執行框架,不同的子類實現抽象方法即可快速拓展。

反思(抽象類的必要性):

介面的所有方法都是抽象方法,是抽象類的乙個特例,不同有普通成員方法和成員變數,無法定義模板。

關鍵:呼叫者——命令——接收者,呼叫者依賴一組命令,命令呼叫接受者的方法

將請求封裝為物件,將行為的呼叫者和接受者解耦

提供一種方法順序訪問乙個聚合物件中各個元素, 而又無須暴露該物件的內部表示

關鍵:迭代類實現hasnext和next方法訪問資料,容器可以獲得自己的iterator

**設計模式: spring aop 功能的實現。

單例設計模式: spring 中的 bean 預設都是單例的。

模板方法模式: spring 中jdbctemplatehibernatetemplate等以 template 結尾的對資料庫操作的類,它們就使用到了模板模式。

裝飾器設計模式: 我們的專案需要連線多個資料庫,而且不同的客戶在每次訪問中根據需要會去訪問不同的資料庫。這種模式讓我們可以根據客戶的需求能夠動態切換不同的資料來源。

觀察者模式:spring 事件驅動模型就是觀察者模式很經典的乙個應用。

介面卡模式:spring aop 的增強或通知(advice)使用到了介面卡模式、spring mvc 中也是用到了介面卡模式適配controller

參考自

設計模式複習 策略模式

封裝一系列演算法,演算法之間互相增加替換,不會影響到客戶端,相當於是先定義乙個統一介面,然後各個演算法繼承這個介面實現,然後,再層狀一層邏輯呼叫,客戶端只需要呼叫這個最後封裝的類就好了,但是這樣的話客戶端在演算法選擇使用的時候需要自己例項化具體演算法,所以可以考慮用工廠把這個策略類繼續優化下即可。實...

設計模式複習 外觀模式

為了系統中的一組介面提供乙個一致的介面,此模式定義了乙個高層介面,這個介面使得這一子系統更加容易使用。外觀模式 facade class subsystemone class subsystemtwo class subsystemthree class facade void facadeshow...

設計模式複習(一)

重用的設計方法 多維管理模式 設計模式四要素 設計模式分為三類 結構性模式 行為型模式 23種設計模式總覽,加粗的為課上學過的 建立型結構型 行為型類 工廠方法 factory method 介面卡 adapter 直譯器 interpreter 模板方法 template method 物件抽象工...