『设计模式』大话西游的移魂大法竟移出来了桥接模式
23種設計模式+額外常用設計模式匯總 (持續更新)
大話西游里有那么一幕,牛魔王的妹妹使用移魂大法,使幾個人的靈魂交換。我們考慮一個問題,一個哲學問題,到底他們時靈魂發生了轉移,還是肉體發生了轉移。到底肉體是靈魂的載體,還是靈魂是肉體的產物。這部唯心主義了,不行不行,我可是社會唯物主義好青年,看我用橋接模式給你給他們連起來。(PS:為了騙流量,博主起了這個名字,內容很有用)
橋接模式
橋接(Bridge)是用于把抽象化與實現化解耦,使得二者可以獨立變化。這種類型的設計模式屬于結構型模式,它通過提供抽象化和實現化之間的橋接結構,來實現二者的解耦。
這種模式涉及到一個作為橋接的接口,使得實體類的功能獨立于接口實現類。這兩種類型的類可被結構化改變而互不影響。
橋接模式是一個非常有用的模式,也是比較復雜的一個模式。熟悉這個模式對于理解面向對象的設計原則,包括"開-閉"原則(OCP)以及組合/聚合復用原則(CARP)都很有幫助。理解好這兩個原則,有助于
形成正確的設計思想和培養良好的設計風格。
核心思想:以聚合代替原本的繼承關系,重構代碼結構實現松耦合(Coupling),二是高內聚(Cohesion)。
面向對象系統追求的目標就是盡可能地提高系統模塊內部的內聚(Cohesion)盡可能降低模塊間的耦合(Coupling)。然而這也是面向對象設計過程中最難把握的部分
優點:
缺點:
橋接模式的引入會增加系統的理解與設計難度,由于聚合關聯關系建立在抽象層,要求開發者針對抽象進行設計與編程。
適用場景:
實現:
我們用一個示例來形象的說明什么事橋接 模式,但是這個例子不具有開發意義,只是為了講清楚實現。
如果我們想實現PC系統和軟件的關系的軟件架構該如何實現。
(再次說明,只是為了舉例,評論區總有抬杠的😂)
第一種方式:
感覺很良好,采用繼承方式。但是如果再增加一個Mac操作系統該怎么辦?
看完可能會說,沒啥啊,不就多了幾個類,復制粘貼一下不就好了。
真的是這樣嗎?
- 開發時,復制粘貼絕不是一件好事,這個我們之前就說過。
- 如果說Kubuntu或者說CentOS和Unix等系統都要放到這里呢,粘貼真的夠用嗎?
所以當二級分類一多,這里軟件架構就不是那么合理了!
第二種方式:
我這么聰明我肯定有辦法啊!看我怎么做!
你看,我這么一重構,這不就完事了,我加個MAC,再來十個系統我也不怕!
結果老板說,軟件不應該還有通訊軟件,音樂軟件,視頻軟件…
我暈!
又變得跟第一種一樣,每一種都是拖家帶口的生成!
第三種方式
所以我們要是用橋接模式,請看:
順勢我們給出橋接UML圖
具體代碼:
Implementor :
package 橋接模式;public abstract class Implementor {public abstract void Operaction(); }ConcreteImplementorA
package 橋接模式;public class ConcreteImplementorA extends Implementor {@Overridepublic void Operaction() {System.out.println("我是A的具體方法");}}ConcreteImplementorB
package 橋接模式;public class ConcreteImplementorB extends Implementor {@Overridepublic void Operaction() {System.out.println("我是B的具體方法");}}Abstraction
package 橋接模式;public class Abstraction {protected Implementor im;public void setIm(Implementor im) {this.im = im;}void operaction() {im.Operaction();} }RefindAbstraction
package 橋接模式;public class RefindAbstraction extends Abstraction {public void Operaction() {im.Operaction();} }Client
package 橋接模式;public class Client {public static void main(String[] args) {// TODO Auto-generated method stubAbstraction ab=new RefindAbstraction();ab.setIm(new ConcreteImplementorA());ab.operaction();ab.setIm(new ConcreteImplementorB());ab.operaction();}}運行結果:
總結
以上是生活随笔為你收集整理的『设计模式』大话西游的移魂大法竟移出来了桥接模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 汽车发明专利公开量排行出炉 东风领衔 比
- 下一篇: 快手实名认证怎么查看