【Java】設計模式--結構型模式
目錄
類的介面卡模式(extends + implements)[Adapter的類]
物件的介面卡模式(implements + 物件) [這裡的物件指的是Adaptee的物件]
介面的介面卡模式(abstract)[ 將介面適配成抽象類與類進行溝通 ]
介面卡模式
希望由某個類A(Adapter)呼叫方法B,但是方法B是類B(Adaptee)中的方法,於是用一個目標介面(Target)合併B中方法
(簡單來說:就是類A呼叫類B方法)
*Adapter:實現了目標介面,通過包裝一個需要適配的物件,將原介面轉為目標介面
*Adaptee:需要適配的類或者介面(需要呼叫的方法所在類)
*Target:客戶所期待的介面(所希望這個類有的方法),可以是具體的類也可以是抽象類或者介面
類的介面卡模式(extends + implements)[Adapter的類]
*希望將一個類轉換成適合另一個新介面的新類:繼承原有子類、實現新介面
物件的介面卡模式(implements + 物件) [這裡的物件指的是Adaptee的物件]
*希望將一個物件轉換成適應另一個介面的物件
介面的介面卡模式(abstract)[ 將介面適配成抽象類與類進行溝通 ]
*這個有點特別,因為並不需要呼叫別的類的方法,而是減少對於介面的實現,如圖類AAA通過繼承一個抽象類,只實現了A方法
裝飾者模式(AOP)
顧名思義,裝飾 --> 變得更厲害,能裝飾什麼呢?屬性?似乎有點沒用,不如直接加。方法?好像有點用哦
*繼承實現裝飾者模式相同功能為什麼不好
裝飾是建構函式引數傳遞進行增強
如果為了某個功能而產生子類(繼承)那麼那個體系是非常臃腫的
*例如:
你有個物件有個功能 是在N年前建立的,如今你覺得功能不夠用了 寫個類把物件傳進來就可以解決問題(動態增加)了
如果這個功能寫錯了 我就把自己寫的功能去掉又不影響以前的功能靈活性相當強的(動態撤銷)。
代理模式(Proxy)
代理模式和裝飾模式非常類似,甚至程式碼都類似。
*二者最主要的區別是:
代理模式中,代理類對被代理的物件有控制權,決定其執行或者不執行。
而裝飾模式中,裝飾類對代理物件沒有控制權,只能為其增加一層裝飾,以加強被裝飾物件的功能,僅此而已
*測試用例:
外觀模式(Facade)
外觀模式是為了解決類與類之間的依賴關係的,像spring一樣,可以將類和類之間的關係配置到配置檔案中。
而外觀模式就是將他們的關係放在一個Facade類中,降低了類之間的耦合度,該模式中沒有涉及到介面
Facade類(注入其他類)
橋接模式(Bridge)
橋接的用意是:將抽象化與實現化解耦,使得二者可以獨立變化,像我們常用的JDBC橋DriverManager一樣,JDBC進行連線資料庫的時候,在各個資料庫之間進行切換,基本不需要動太多的程式碼,甚至絲毫不用動,原因就是JDBC提供統一介面,每個資料庫提供各自的實現,用一個叫做資料庫驅動的程式來橋接就行了
//註冊資料庫驅動程式 Class.forName("com.mysql.jdbc.Driver"); Connection con=DriverManager.getConnection(dbUrl, dbUserName, dbPassWord);
---------------------
作者:終點
來源:CSDN
原文:https://blog.csdn.net/zhangerqing/article/details/8239539
版權宣告:本文為博主原創文章,轉載請附上博文連結!
我的理解就是,在需要多種實現自由切換時,一般的做法可能是寫一個基本類(抽象類),然後不同的實現需求就都繼承這個類來實現,使用的是繼承。
而*橋接模式是把方法實現的部分分離出來,需要哪種實現就傳入哪種實現進抽象類的實現類,就像傳入一個引數給建構函式一樣,只不過我們傳的是方法的實現,並且使用的是耦合。而所謂的橋,就是連線抽象和實現的類(MyBridge)。
需要分離不同實現的部分method()以及不同的實現SourceA/SourceB
實現的這一部分可以獨立變化
抽象的這一部分可以獨立的變化(*為什麼使用抽象類原因)
連線抽象和實現後,變成一個“完整”的類(所謂的橋)
組合模式(Composite)
組合模式有時又叫部分-整體模式在處理類似樹形結構的問題時比較方便
*部分-整體:也就是由部分組成了一個整體,那麼就要有一個整體以及若干個部分(有點類似於樹的資料結構)。
以二叉樹來舉例,每一個結點都是上一層的部分,同時也是下一層的整體
Test
享元模式(Flyweight)共享單元(物件)
享元模式的主要目的是實現物件的共享,即共享池,當系統中物件多的時候可以減少記憶體的開銷,通常與工廠模式一起使用
*個人理解:有很多地方需要某個類的物件,如果每個地方都建立,就會造成浪費,為什麼不用一個池來管理呢,如果需要此物件,就從池傳過去。
享元模式的核心在於享元工廠類(FlyweightFactory),享元工廠類的作用在於提供一個用於儲存享元物件的享元池
使用者需要物件時,首先從享元池中獲取;如果享元池中不存在,則建立一個新的享元物件返回給使用者,並在享元池中儲存該新增物件
相關文章
- (Java)設計模式:結構型Java設計模式
- 結構型設計模式設計模式
- 設計模式之代理模式(結構型)設計模式
- JAVA設計模式 5【結構型】代理模式的理解與使用Java設計模式
- 聊一聊設計模式(三)-- 結構型設計模式設計模式
- 大話 PHP 設計模式--結構型PHP設計模式
- 物件導向-設計模式-結構型物件設計模式
- 【設計模式自習室】結構型:組合模式 Composite設計模式
- 初探Java設計模式2:結構型模式(代理模式,介面卡模式等)Java設計模式
- (Java)設計模式:建立型Java設計模式
- 設計模式詳解之結構型設計模式——介面卡、裝飾器設計模式
- 設計模式(十五)----結構型模式之外觀模式設計模式
- 建立型設計模式對比總結 設計模式(八)設計模式
- (Java)設計模式:行為型Java設計模式
- 設計模式(十三)----結構型模式之橋接模式設計模式橋接
- JAVA設計模式 4【建立型】理解建造者模式Java設計模式
- 結構型:策略模式模式
- 結構型-代理模式模式
- DDD設計模式結構圖設計模式
- 無廢話設計模式(11)結構型模式--代理模式設計模式
- 設計模式(十六)----結構型模式之代理享元模式設計模式
- 設計模式(十一)----結構型模式之裝飾者模式設計模式
- 設計模式(十四、十五)----結構型模式之組合模式設計模式
- 設計模式(十)----結構型模式之介面卡模式設計模式
- Java設計模式——模板設計模式Java設計模式
- 無廢話設計模式(14)結構型模式--狀態模式設計模式
- 無廢話設計模式(9)結構型模式--享元模式設計模式
- 無廢話設計模式(7)結構型模式--裝飾模式設計模式
- JavaScript設計模式之建立型設計模式JavaScript設計模式
- Java設計模式——命令模式Java設計模式
- Java設計模式—代理模式Java設計模式
- Java設計模式-代理模式Java設計模式
- Java設計模式簡介(總結)Java設計模式
- JAVA設計模式 3【建立型】理解工廠模式與抽象工廠模式Java設計模式抽象
- 設計模式-建立型-單例模式設計模式單例
- 設計模式總結 —— 單例設計模式設計模式單例
- 設計模式總結(模式篇)設計模式
- 【Java】設計模式--建立型模式Java設計模式