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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

asp.net

23种设计模式之门面模式

發(fā)布時(shí)間:2024/8/23 asp.net 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 23种设计模式之门面模式 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

門面模式的定義

定義: 要求一個(gè)子系統(tǒng)的外部與其內(nèi)部的通信必須通過(guò)一個(gè)統(tǒng)一的對(duì)象進(jìn)行. 門面模式提供一個(gè)高層次的接口, 使得子系統(tǒng)更易于使用.

通俗的說(shuō), 就是設(shè)計(jì)一個(gè)類,專門用于對(duì)外服務(wù)的, 門面對(duì)象是外界訪問(wèn)子系統(tǒng)內(nèi)部的唯一通道

其類圖如下:

?

其中兩個(gè)角色如下:

  • Facade 門面角色: 客戶端可以調(diào)用這個(gè)角色的方法. 此角色知曉子系統(tǒng)的所有功能和責(zé)任. 一般情況下, 本角色會(huì)將所有從客戶端發(fā)來(lái)的請(qǐng)求委派到相應(yīng)的子系統(tǒng)去, 也就是說(shuō)該角色沒(méi)有實(shí)際的業(yè)務(wù)邏輯, 只是一個(gè)委托類
  • Subsystem 子系統(tǒng)角色: 可以同時(shí)有一個(gè)或多個(gè)子系統(tǒng). 每一個(gè)子系統(tǒng)都不是一個(gè)單獨(dú)的類, 而是一個(gè)類的集合.子系統(tǒng)并不知道門面的存在. 對(duì)于子系統(tǒng)而言, 門面僅僅是另外一個(gè)客戶端而已
  • 子系統(tǒng)代碼如下:

    ?

    門面對(duì)象代碼:

    ?

    門面模式的應(yīng)用

    門面模式的優(yōu)點(diǎn):

  • 減少系統(tǒng)的相互依賴. 如果不使用門面模式, 外界訪問(wèn)直接深入到子系統(tǒng)內(nèi)部, 相互之間是一種強(qiáng)耦合關(guān)系, 這樣的強(qiáng)依賴是系統(tǒng)設(shè)計(jì)所不能接受的. 門面模式的出項(xiàng)很好的解決了這個(gè)問(wèn)題, 所有的依賴都是對(duì)門面對(duì)象的依賴, 與子系統(tǒng)無(wú)關(guān).
  • 提高了靈活性. 依賴減少了, 靈活性自然提高了.
  • 提高安全性. 想讓你訪問(wèn)子系統(tǒng)的哪些業(yè)務(wù)就開(kāi)通那些邏輯, 不在門面上開(kāi)通的方法, 休想訪問(wèn)到
  • 門面模式的缺點(diǎn):

    門面模式最大的缺點(diǎn)就是不符合開(kāi)閉原則, 對(duì)修改關(guān)閉, 對(duì)擴(kuò)展開(kāi)放. 一旦在系統(tǒng)投產(chǎn)后發(fā)現(xiàn)有一個(gè)小錯(cuò)誤, 怎么解決? 完全最從開(kāi)閉原則,根本沒(méi)辦法解決. 唯一能做的一件事就是修改門面對(duì)象的代碼, 這個(gè)風(fēng)向相當(dāng)大.

    門面模式的使用場(chǎng)景:

  • 為一個(gè)復(fù)雜的模塊或子系統(tǒng)提供一個(gè)供外界訪問(wèn)的接口
  • 子系統(tǒng)相對(duì)獨(dú)立--外界對(duì)子系統(tǒng)的訪問(wèn)只要黑箱操作即可.
  • 預(yù)防低水平人員帶來(lái)的風(fēng)險(xiǎn)擴(kuò)散.
  • 門面模式的注意事項(xiàng)

    1.一個(gè)子系統(tǒng)可以有多個(gè)門面

  • 門面已經(jīng)龐大到不能忍受的重讀. 當(dāng)一個(gè)門面對(duì)象過(guò)于龐大, 雖然都是非常簡(jiǎn)單的委托操作, 也建議拆分成多個(gè)門面,否則會(huì)給以后的維護(hù)和擴(kuò)展帶來(lái)不必要的麻煩. 按照功能拆分是一個(gè)非常好的原則, 比如一個(gè)數(shù)據(jù)庫(kù)操作的門面可以拆分為增刪改查等
  • 子系統(tǒng)可以提供不同訪問(wèn)路徑, 當(dāng)有兩個(gè)不同的高層模塊來(lái)訪問(wèn)子系統(tǒng), 模塊二屬于受限訪問(wèn)對(duì)象, 只能訪問(wèn)methodB 方法, 如何處理呢?
  • ?

    增加的門面非常簡(jiǎn)單, 委托給已經(jīng)存在的門面對(duì)象來(lái)處理. 這樣可以盡量保持相同的代碼只編寫一遍, 避免以后到處修改相似代碼的悲劇.

    2.門面不參與子系統(tǒng)內(nèi)的業(yè)務(wù)邏輯

    門面對(duì)象中不要出現(xiàn)具體的業(yè)務(wù)邏輯代碼, 否則就會(huì)產(chǎn)生一個(gè)倒依賴的問(wèn)題, 在門面模式中, 門面角色應(yīng)該是穩(wěn)定的, 它不應(yīng)該經(jīng)常變化, 一個(gè)系統(tǒng)一旦投入運(yùn)行他就不應(yīng)該被改變, 它是一個(gè)系統(tǒng)對(duì)外的接口, 變來(lái)變?nèi)ミ€怎么保證其他模塊的穩(wěn)定運(yùn)行呢?

    如果一定要出現(xiàn)業(yè)務(wù)處理, 應(yīng)該建立一個(gè)封裝類, 封裝完畢后提供給門面對(duì)象使用.


    門面模式是一個(gè)很好的封裝方法, 一個(gè)子系統(tǒng)比較復(fù)雜時(shí), 比如算法或者業(yè)務(wù)比較復(fù)雜, 就可以封裝出一個(gè)或多個(gè)門面出來(lái), 項(xiàng)目的接口簡(jiǎn)單, 而且擴(kuò)展性非常好. 還有, 對(duì)于一個(gè)較大的項(xiàng)目, 為了避免人員帶來(lái)的風(fēng)險(xiǎn), 也可以使用門面模式.

    總結(jié)

    以上是生活随笔為你收集整理的23种设计模式之门面模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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