定義個策略接口,不一樣的實現類提供不一樣的具體策略算法, 同時它們之間能夠互相替換.html
IStrategy 接口定義了策略方法,Strategy1 和 Strategy2 經過實現 IStrategy 提供不一樣的策略,而 User 組合了 IStrategy ,能夠經過給 User 對象設置不一樣具體實現類來讓其得到不一樣的策略java
策略模式.PNG
定義一個用以建立對象的工廠, 根據不一樣的條件生成不一樣的對象算法
注意簡單工廠模式與策略模式是不一樣的,工廠模式是根據給定的條件返回相應的對象,而策略模式是將不一樣的策略對象傳遞給使用者以實現不一樣策略,(好吧,我差點分不清了)詳細不一樣點分析可轉這裏安全
簡單工廠模式.PNG
針對每一種產品提供一個工廠類,經過不一樣的工廠實例來建立不一樣的產品實例框架
與簡單工廠模式不一樣點是它要爲每一種產品提供一個工廠類,不一樣工廠類實現同一個工廠接口,返回不一樣產品,詳細分析可轉這裏ui
工廠模式.PNG
應對產品族概念而生spa
與工廠模式相比,抽象工廠模式是爲了應對產品族.net
抽象工廠模式.PNG
動態的給一個對象添加一些額外的功能線程
ComponentImpl 和 Decorator 類都實現了 IComponent 接口,不一樣的是 ComponentImpl 提供了具體實現,而 Decorator 是先聚合 ComponentImpl 接着在本身的實現方法即
operation()
方法中作些處理(即裝飾)後再調用 ComponentImpl 對象的具體實現3d
裝飾者模式.PNG
封裝被代理對象並限制外界對被代理對象的訪問
注意區分裝飾者模式和代理模式的區別。在代理模式中,ComponentImpl 和 Proxy 類都實現了 IComponent 接口,Proxy 對象中雖然也維護着一個 ComponentImpl 對象,但通常狀況下它是代理類本身初始化的,不像裝飾者模式是經過
set
進去的,同時在接口方法即operation()
中代理對象會限制外界對被代理對象的訪問,而裝飾者模式是裝飾者給被裝飾者添加額外的行爲,詳細不一樣點分析可轉這裏
代理模式.PNG
定義一個操做的算法骨架, 並將一些步驟延遲到子類中
AbsTemplate 抽象類中定義了一系列的方法,其中外界惟一能調用的
operation()
方法是 final 的(即不可重寫),在該方法中分別調用了first()
、second()
、third()
方法(即搭好算法框架),子類經過繼承抽象類重寫不一樣的方法來添加各自的行爲
模板方法模式.PNG
爲系統向外界提供一個統一的接口
Fracade 爲 ComponentA 、ComponentB 、ComponentC 向外即 ClientA 、ClientB 提供統一的接口
外觀模式.PNG
將一個類的接口轉換成客戶但願的另外一個接口
好比項目引入第三方類庫後應該先封裝起來轉換成本身須要的接口再使用,防止之後類庫出現變動。AdapterA 先將 LibraryClass 封裝起來,其對外提供的
operation()
方法中調用 LibraryClass 對象的方法,若之後換類庫,只需改 AdapterA 類或者建立新的 Adapter 實現類便可
適配器模式.PNG
將抽象部分與實現部分分離,使它們均可以獨立的變化
將本來要耦合的上下層抽象出來,上層和下層以組合的方式鏈接,而後上下層抽象可派生出許多不一樣方向的子類。AbsShape 封裝了 IDrawProgram 接口,這樣它的子類想從 DPA 切換到 DPB 或者別的,只需
set
進去就行啦(你看,這 UML 圖多像座橋)
橋接模式.PNG
注: 適配器、橋接與外觀三模式之間關係
將一個複雜對象的構建與它的表示分離.
做爲 Product 的內部類,Builder 統一了 Product 的整個構建過程,同時在
build
過程當中,能夠因爲set
值順序不一樣等緣由產生不一樣的效果
建造者模式.PNG
定義了一種一對多的依賴關係,讓多個觀察者對象同時監聽某一主題對象,在它的狀態發生變化時,會通知全部的觀察者.
先將 Observer 註冊到 Observable ,那麼當 Observable 狀態改變時會通知它持有的全部 Observer ,對了,最好 Observable 中的 mList 的泛型是
WeakReference<Observer>
,防止內存泄漏
觀察者模式.PNG
保證一個類僅有一個實例,並提供一個訪問它的全局控制點.
下圖是利用 Java 的語言特性實現的線程安全且能延遲初始化的單例模式,Singleton 中維護着靜態私有的 SingleHolder 類, SingleHolder 類中持有個靜態常量 sHolder ,Client 若經過 getSingleInstance 方法獲取 Singleton 對象則直接返回 SingleHolder 類的 sHolder ,詳細分析可轉這裏
將一個請求封裝成爲一個對象, 使能夠用不一樣的請求對客戶進行參數化
Action 封裝了具體行爲,Command 封裝了 Action 並提供空方法
execute()
,它的子類經過重寫該方法可在方法裏調用 mAction 不一樣行爲達到封裝命令的目的,最後 Client 封裝了一系列的 Command 對象,並能夠經過notify()
方法一個接着一個調用所持有 Command 對象們的execute()
方法達到給 Action 傳達命令的目的
命令模式.PNG