<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          可能經(jīng)常用,但是你不知道的冷門設(shè)計(jì)模式

          共 2008字,需瀏覽 5分鐘

           ·

          2021-11-14 17:39

          設(shè)計(jì)模式專欄

          ?

          如題,直接上答案——門面模式?。?!

          1、什么是門面模式?

          Provide a unified interface to a set of interfaces in a subsystem.Facade defines a higher-level interface that makes the subsystem easier to use.

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

          說人話:假設(shè)有一個(gè)系統(tǒng) A,提供了 a、b、c、d 四個(gè)接口。系統(tǒng) B 完成某個(gè)業(yè)務(wù)功能,需要調(diào)用 A 系統(tǒng)的 a、b、d 接口。利用門面模式,我們提供一個(gè)包裹 a、b、d 接口調(diào)用的門面接口 x,給系統(tǒng) B 直接使用。至于為什么要這樣做,下文會(huì)告訴你。

          2、門面模式定義

          ①、Facade 門面角色

          此角色知曉子系統(tǒng)的所有功能和責(zé)任,客戶端可以調(diào)用這個(gè)角色的方法,會(huì)將所有從客戶端發(fā)來的請(qǐng)求委派到相應(yīng)的子系統(tǒng)去, 也就說該角色沒有實(shí)際的業(yè)務(wù)邏輯, 只是一個(gè)委托類。

          ②、Subsystem 子系統(tǒng)角色

          可以同時(shí)有一個(gè)或者多個(gè)子系統(tǒng)。每一個(gè)子系統(tǒng)都不是一個(gè)單獨(dú)的類, 而是一個(gè)類的集合。子系統(tǒng)并不知道門面的存在。對(duì)于子系統(tǒng)而言, 門面僅僅是另外一個(gè)客戶端而已。

          3、門面模式通用代碼實(shí)現(xiàn)

          /**
          ?*?子系統(tǒng)A
          ?*/

          public?class?ClassA?{
          ????public?void?doA(){
          ????????System.out.println("子系統(tǒng)A方法");
          ????}
          }
          /**
          ?*?子系統(tǒng)B
          ?*/

          public?class?ClassB?{
          ????public?void?doB(){
          ????????System.out.println("子系統(tǒng)B方法");
          ????}
          }
          /**
          ?*?子系統(tǒng)C
          ?*/

          public?class?ClassC?{
          ????public?void?doC(){
          ????????System.out.println("子系統(tǒng)C方法");
          ????}
          }
          /**
          ?*?門面角色
          ?*/

          public?class?Facade?{
          ????private?ClassA?a?=?new?ClassA();
          ????private?ClassB?b?=?new?ClassB();
          ????private?ClassC?c=?new?ClassC();

          ????//?提供給外部訪問的方法
          ????public?void?doSomething(){
          ????????this.a.doA();
          ????????this.b.doB();
          ????????this.c.doC();
          ????}
          }

          看上去,沒有門面角色,我們自己去調(diào)用三個(gè)子系統(tǒng)的方法也是一樣,但是假如三個(gè)子系統(tǒng)之間有先后順序,還有來自不同網(wǎng)絡(luò)開銷,我們通過門面模式提供的方法,就屏蔽了這些差異,讓我們只需要調(diào)用門面角色提供給我們的方法即可。

          4、門面模式優(yōu)點(diǎn)

          ①、減少系統(tǒng)的相互依賴

          如果我們不使用門面模式, 外界訪問直接深入到子系統(tǒng)內(nèi)部, 相互之間是一種強(qiáng)耦合關(guān)系, 你死我就死, 你活我才能活, 這樣的強(qiáng)依賴是系統(tǒng)設(shè)計(jì)所不能接受的, 門面模式的出現(xiàn)就很好地解決了該問題, 所有的依賴都是對(duì)門面對(duì)象的依賴, 與子系統(tǒng)無關(guān)。

          ②、提高安全性

          想讓你訪問子系統(tǒng)的哪些業(yè)務(wù)就開通哪些邏輯, 不在門面上開通的方法, 你休想訪問到。

          5、門面模式應(yīng)用場(chǎng)景

          ①、解決易用性問題

          門面模式可以用來封裝系統(tǒng)的底層實(shí)現(xiàn),隱藏系統(tǒng)的復(fù)雜性,提供一組更加簡(jiǎn)單易用、更高層的接口。

          ②、解決性能問題

          通過將多個(gè)接口調(diào)用替換為一個(gè)門面接口調(diào)用,減少網(wǎng)絡(luò)通信成本,提高客戶端的響應(yīng)速度。

          ③、解決分布式事務(wù)問題

          需要調(diào)用多個(gè)子系統(tǒng)的接口方法,而這些接口要么都成功,要么都失敗,我們就可以利用門面模式包裹這些子系統(tǒng)接口,然后通過某種方法保證這些接口在一個(gè)事務(wù)中完成。

          6、適配器模式和門面模式區(qū)別

          適配器模式:主要做接口轉(zhuǎn)換,解決的是原接口和目標(biāo)接口不匹配的問題。?

          門面模式:主要做接口整合,解決的是多接口調(diào)用帶來的問題。

          關(guān)于我

          可樂是一個(gè)熱愛技術(shù)的Java程序猿,公眾號(hào)「IT可樂」定期分享有趣有料的精品原創(chuàng)文章!

          非常感謝各位人才能看到這里,原創(chuàng)不易,文章如果有幫助可以關(guān)注、點(diǎn)贊、分享或評(píng)論,這都是對(duì)我的莫大支持!

          愿你我人生盡量沒有遺憾的事,愿你我都能奔赴在各自想去的路上。


          瀏覽 37
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产蜜臀精品一区二区免费 | 欧美熟妇精品黑人巨大一二三区 | 91久久精品人人槡人妻人 | 狠狠狠操 | 色五月婷婷影视 |