[置顶] 设计模式之结构类模式——桥梁模式
橋梁模式(Bridge Patter)也叫做橋接模式,是一個比較簡單的模式。
?
定義:
將抽象和實現解耦,使得兩者可以獨立地變化。
?
通用類圖:
?
● Abstraction——抽象化角色
它主要的職責是定義出該角色的行為,同時保存一個對實現化角色的引用,該角色一般是抽象類。
● Implementro——實現化角色
它是接口或者抽象類,定義角色必須的行為和屬性。
● RefinedAbstraction——修正抽象化角色
它引用實現化角色對抽象化角色進行修正。
● ConcreteImplementor——具體實現化角色
它實現接口或抽象類定義的方法和屬性。
?
通用代碼:
?| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | /** ?* 實現化角色 ?* ?* @author Administrator ?* ?*/ publicinterfaceImplementor { ????// 基本方法 ????publicvoiddoSomething(); ????publicvoiddoAnything(); } |
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | /** ?* 具體實現化角色 ?* ?* @author Administrator ?* ?*/ publicclassConcreteImplementor1implementsImplementor { ????publicvoiddoAnything() { ????????// 業務處理邏輯 ????} ????publicvoiddoSomething() { ????????// 業務處理邏輯 ????} } |
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | /** ?* 具體實現化角色 ?* ?* @author Administrator ?* ?*/ publicclassConcreteImplementor2implementsImplementor { ????publicvoiddoAnything() { ????????// 業務處理邏輯 ????} ????publicvoiddoSomething() { ????????// 業務處理邏輯 ????} } |
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | /** ?* 抽象化角色 ?* ?* @author Administrator ?* ?*/ publicabstractclassAbstraction { ????// 定義對實現化角色的引用 ????privateImplementor imp; ????// 約束子類必須實現該構造函數 ????publicAbstraction(Implementor _imp) { ????????this.imp = _imp; ????} ????// 自身的行為和屬性 ????publicvoidrequest() { ????????this.imp.doSomething(); ????} ????// 獲得實現化角色 ????publicImplementor getImp() { ????????returnthis.imp; ????} } |
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | /** ?* 具體抽象化角色 ?* ?* @author Administrator ?* ?*/ publicclassRefinedAbstractionextendsAbstraction { ????// 覆寫構造函數 ????publicRefinedAbstraction(Implementor _imp) { ????????super(_imp); ????} ????// 修正父類的行為 ????@Override ????publicvoidrequest() { ????????/* ?????????* 業務處理 ?????????*/ ????????super.request(); ????????super.getImp().doAnything(); ????} } |
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | /** ?* 場景類 ?* ?* @author Administrator ?* ?*/ publicclassClient { ????/** ?????* @param args ?????*/ ????publicstaticvoidmain(String[] args) { ????????// 定義一個實現化角色 ????????Implementor imp = newConcreteImplementor1(); ????????// 定義一個抽象化角色 ????????Abstraction abs = newRefinedAbstraction(imp); ????????// 執行行文 ????????abs.request(); ????} } |
?
橋梁模式是一個非常簡單的模式,它只是使用了類間的聚合關系、繼承、覆寫等常用功能,但是它卻提供了一個非常清晰、穩定的架構。
?
橋梁模式的優點:
● 抽象和實現分離
這是橋梁模式的主要特點,它完全是為了解決繼承的缺點而提出的設計模式。在該模式下,實現可以不受抽象的約束,不用再綁定在一個固定的抽象層次上。
● 優秀的擴展能力
?
● 實現細節對客戶透明
客戶不用關心細節的實現,它已經由抽象層通過聚合關系完成了封裝。
?
橋梁模式的使用場景:
● 不希望或不適用使用繼承的場景
例如繼承層次過渡、無法更細化設計顆粒等場景,需要考慮使用橋梁模式。
● 接口或抽象類不穩定的場景
明知道接口不穩定還想通過實現或繼承來實現業務需求,那是得不償失的,也是比較失敗的做法。
● 重用性要求較高的場景
設計的顆粒度越細,則被重用的可能性就越大,而采用繼承則受父類的限制,不可能出現太細的顆粒度。
?
橋梁模式的注意事項:
使用橋梁模式時主要考慮如何拆分抽象和實現,并不是一涉及繼承就要考慮使用該模式,那還要繼承干什么。
橋梁模式的意圖還是對變化的封裝,盡量把可能變化的因素封裝到最細、最小的邏輯單元中,避免風險擴散。
系統設計時,發現類的繼承有N層時,可以考慮使用橋梁模式。
轉載于:https://blog.51cto.com/3001448/1205864
總結
以上是生活随笔為你收集整理的[置顶] 设计模式之结构类模式——桥梁模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 文件I/O实践(1) --基础API
- 下一篇: 深度学习【目标检测】