『设计模式』大话西游的移魂大法竟移出来了桥接模式
23種設(shè)計(jì)模式+額外常用設(shè)計(jì)模式匯總 (持續(xù)更新)
大話西游里有那么一幕,牛魔王的妹妹使用移魂大法,使幾個(gè)人的靈魂交換。我們考慮一個(gè)問題,一個(gè)哲學(xué)問題,到底他們時(shí)靈魂發(fā)生了轉(zhuǎn)移,還是肉體發(fā)生了轉(zhuǎn)移。到底肉體是靈魂的載體,還是靈魂是肉體的產(chǎn)物。這部唯心主義了,不行不行,我可是社會(huì)唯物主義好青年,看我用橋接模式給你給他們連起來。(PS:為了騙流量,博主起了這個(gè)名字,內(nèi)容很有用)
橋接模式
橋接(Bridge)是用于把抽象化與實(shí)現(xiàn)化解耦,使得二者可以獨(dú)立變化。這種類型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式,它通過提供抽象化和實(shí)現(xiàn)化之間的橋接結(jié)構(gòu),來實(shí)現(xiàn)二者的解耦。
這種模式涉及到一個(gè)作為橋接的接口,使得實(shí)體類的功能獨(dú)立于接口實(shí)現(xiàn)類。這兩種類型的類可被結(jié)構(gòu)化改變而互不影響。
橋接模式是一個(gè)非常有用的模式,也是比較復(fù)雜的一個(gè)模式。熟悉這個(gè)模式對(duì)于理解面向?qū)ο蟮脑O(shè)計(jì)原則,包括"開-閉"原則(OCP)以及組合/聚合復(fù)用原則(CARP)都很有幫助。理解好這兩個(gè)原則,有助于
形成正確的設(shè)計(jì)思想和培養(yǎng)良好的設(shè)計(jì)風(fēng)格。
核心思想:以聚合代替原本的繼承關(guān)系,重構(gòu)代碼結(jié)構(gòu)實(shí)現(xiàn)松耦合(Coupling),二是高內(nèi)聚(Cohesion)。
面向?qū)ο笙到y(tǒng)追求的目標(biāo)就是盡可能地提高系統(tǒng)模塊內(nèi)部的內(nèi)聚(Cohesion)盡可能降低模塊間的耦合(Coupling)。然而這也是面向?qū)ο笤O(shè)計(jì)過程中最難把握的部分
優(yōu)點(diǎn):
缺點(diǎn):
橋接模式的引入會(huì)增加系統(tǒng)的理解與設(shè)計(jì)難度,由于聚合關(guān)聯(lián)關(guān)系建立在抽象層,要求開發(fā)者針對(duì)抽象進(jìn)行設(shè)計(jì)與編程。
適用場(chǎng)景:
實(shí)現(xiàn):
我們用一個(gè)示例來形象的說明什么事橋接 模式,但是這個(gè)例子不具有開發(fā)意義,只是為了講清楚實(shí)現(xiàn)。
如果我們想實(shí)現(xiàn)PC系統(tǒng)和軟件的關(guān)系的軟件架構(gòu)該如何實(shí)現(xiàn)。
(再次說明,只是為了舉例,評(píng)論區(qū)總有抬杠的😂)
第一種方式:
感覺很良好,采用繼承方式。但是如果再增加一個(gè)Mac操作系統(tǒng)該怎么辦?
看完可能會(huì)說,沒啥啊,不就多了幾個(gè)類,復(fù)制粘貼一下不就好了。
真的是這樣嗎?
- 開發(fā)時(shí),復(fù)制粘貼絕不是一件好事,這個(gè)我們之前就說過。
- 如果說Kubuntu或者說CentOS和Unix等系統(tǒng)都要放到這里呢,粘貼真的夠用嗎?
所以當(dāng)二級(jí)分類一多,這里軟件架構(gòu)就不是那么合理了!
第二種方式:
我這么聰明我肯定有辦法啊!看我怎么做!
你看,我這么一重構(gòu),這不就完事了,我加個(gè)MAC,再來十個(gè)系統(tǒng)我也不怕!
結(jié)果老板說,軟件不應(yīng)該還有通訊軟件,音樂軟件,視頻軟件…
我暈!
又變得跟第一種一樣,每一種都是拖家?guī)Э诘纳?#xff01;
第三種方式
所以我們要是用橋接模式,請(qǐng)看:
順勢(shì)我們給出橋接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();}}運(yùn)行結(jié)果:
總結(jié)
以上是生活随笔為你收集整理的『设计模式』大话西游的移魂大法竟移出来了桥接模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 汽车发明专利公开量排行出炉 东风领衔 比
- 下一篇: 快手实名认证怎么查看