日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

『设计模式』大话西游的移魂大法竟移出来了桥接模式

發(fā)布時(shí)間:2023/12/15 asp.net 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 『设计模式』大话西游的移魂大法竟移出来了桥接模式 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

23種設(shè)計(jì)模式+額外常用設(shè)計(jì)模式匯總 (持續(xù)更新)
大話西游里有那么一幕,牛魔王的妹妹使用移魂大法,使幾個(gè)人的靈魂交換。我們考慮一個(gè)問題,一個(gè)哲學(xué)問題,到底他們時(shí)靈魂發(fā)生了轉(zhuǎn)移,還是肉體發(fā)生了轉(zhuǎn)移。到底肉體是靈魂的載體,還是靈魂是肉體的產(chǎn)物。這部唯心主義了,不行不行,我可是社會(huì)唯物主義好青年,看我用橋接模式給你給他們連起來(lái)。(PS:為了騙流量,博主起了這個(gè)名字,內(nèi)容很有用)

橋接模式

橋接(Bridge)是用于把抽象化與實(shí)現(xiàn)化解耦,使得二者可以獨(dú)立變化。這種類型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式,它通過提供抽象化和實(shí)現(xiàn)化之間的橋接結(jié)構(gòu),來(lái)實(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):

  • 抽象和實(shí)現(xiàn)的分離。
  • 優(yōu)秀的擴(kuò)展能力。
  • 實(shí)現(xiàn)細(xì)節(jié)對(duì)客戶透明。
  • 缺點(diǎn):

    橋接模式的引入會(huì)增加系統(tǒng)的理解與設(shè)計(jì)難度,由于聚合關(guān)聯(lián)關(guān)系建立在抽象層,要求開發(fā)者針對(duì)抽象進(jìn)行設(shè)計(jì)與編程。

    適用場(chǎng)景:

  • 如果一個(gè)系統(tǒng)需要在構(gòu)件的抽象化角色和具體化角色之間增加更多的靈活性,避免在兩個(gè)層次之間建立靜態(tài)的繼承聯(lián)系,通過橋接模式可以使它們?cè)诔橄髮咏⒁粋€(gè)關(guān)聯(lián)關(guān)系。
  • 對(duì)于那些不希望使用繼承或因?yàn)槎鄬哟卫^承導(dǎo)致系統(tǒng)類的個(gè)數(shù)急劇增加的系統(tǒng),橋接模式尤為適用
  • 一個(gè)類存在兩個(gè)獨(dú)立變化的維度,且這兩個(gè)維度都需要進(jìn)行擴(kuò)展。
  • 實(shí)現(xiàn):

    我們用一個(gè)示例來(lái)形象的說明什么事橋接 模式,但是這個(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,再來(lái)十個(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é)

    以上是生活随笔為你收集整理的『设计模式』大话西游的移魂大法竟移出来了桥接模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。