<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>

          設(shè)計(jì)模式詳解——外觀模式

          共 2112字,需瀏覽 5分鐘

           ·

          2021-10-16 15:31

          前言

          今天我們來看另一個(gè)改變接口的設(shè)計(jì)模式,不過它改變接口的原因是為了簡化接口。這個(gè)模式被巧妙地叫做外觀模式,之所以這么稱呼,是因?yàn)樗鼘⒁粋€(gè)或多個(gè)類的復(fù)雜的實(shí)現(xiàn)都藏在了背后,只顯露出一個(gè)干凈美好的外觀。好了,下面我們就來展開分享下。

          外觀模式

          外觀模式提供了一個(gè)統(tǒng)一的接口,用來訪問子系統(tǒng)中的一群接口,它定義了一個(gè)高層接口,讓子系統(tǒng)更容易使用。下面是外觀模式的一個(gè)模型圖,核心的元素有三個(gè),一個(gè)客戶端,一個(gè)外觀模式,另一塊是很繁雜的子系統(tǒng),其中外觀模式這一層,主要是簡化子系統(tǒng)的接口,為客戶端提供更簡潔的調(diào)用:

          要點(diǎn)

          • 當(dāng)需要簡化并統(tǒng)一一個(gè)很大的接口或者一群復(fù)雜的接口時(shí),使用外觀模式
          • 實(shí)現(xiàn)一個(gè)外觀模式,需要將子系統(tǒng)組合進(jìn)外觀中,然后將工作委托給子系統(tǒng)執(zhí)行
          • 外觀將客戶從一個(gè)復(fù)雜的子系統(tǒng)中解耦

          示例代碼

          下面我們通過一個(gè)很形象的日常生活示例,來說明外觀模式具體的應(yīng)用場景。

          我們可以想象這樣一個(gè)場景:下班回到家,你想看個(gè)電影,放松一下,但是你并沒有感覺到很開心。因?yàn)榭紤]到要拖地,而且家里水壺還沒水了,你還要燒個(gè)熱水,還有自己找電影,想到這一切的一切,你突然放棄了想看電影的想法。

          因?yàn)樵谡G闆r下,每一步都要自己親自操作:首先先打開家里的掃地機(jī)器人(這已經(jīng)算高端了),然后接水燒水,之后才能打開電腦、找電影,整個(gè)過程操作完之后,你才能開始看電影,但是這時(shí)候你可能會(huì)感覺到更加疲憊。

          但是假如,突然有一天你的生活開啟了外觀模式,那整個(gè)場景就完全不一樣了。這時(shí)候回到家,你只需要一鍵操作,掃地、燒水、找電影都可以一氣呵成,這樣你就可以直接看自己喜歡的電影了,豈不是美滋滋!

          下面我們就來詳細(xì)看下這個(gè)一氣呵成的方法,具體如何用代碼來實(shí)現(xiàn):

          掃地操作

          正常情況下,你要自己用掃把掃地,如果是掃地機(jī)器人的話,你至少需要啟動(dòng)下開關(guān)

          public?class?Broom?{
          ????public?void?sweepFloor()?{
          ????????System.out.println("掃帚正在掃地!");
          ????}
          }
          燒水操作

          燒水操作也一樣,你要用水壺接水,然后燒水

          public?class?Kettle?{
          ????public?void?boilWater()?{
          ????????System.out.println("燒水壺正在接水!");
          ????????System.out.println("燒水壺正在燒水!");
          ????}
          }
          搜索電影操作

          緊接著你還要自己搜索電影,然后才能開始看電影

          public?class?Computer?{
          ????public?void?searchVideo()?{
          ????????System.out.println("電腦正在查找電影!");
          ????????System.out.println("電腦查找電影完成!");
          ????}
          }
          外觀模式

          但是如果你的生活啟用了外觀模式,僅需一鍵操作,就可以完成以上操作,同時(shí)開始看電影,感覺這個(gè)痛苦的過程一下就消失了呢,是不是一下就感覺美滋滋了呢!

          public?class?SystemFacade?{
          ????Broom?broom?=?new?Broom();
          ????Kettle?kettle?=?new?Kettle();
          ????Computer?computer?=?new?Computer();

          ????public?void?facade()?{
          ????????broom.sweepFloor();
          ????????kettle.boilWater();
          ????????computer.searchVideo();
          ????????System.out.println("開始播放電影!");
          ????}
          }
          測試代碼

          好了,下面就讓我們來一鍵操作吧!

          ??@Test
          ????public?void?testFacade()?{
          ????????SystemFacade?facade?=?new?SystemFacade();
          ????????facade.facade();
          ????}

          然后我們就可以愉快地看電影了:

          和適配器比較

          • 外觀模式不只是簡化了接口,也將客戶從組件的子系統(tǒng)中解耦
          • 外觀模式和適配器模式可以包裝許多類,但是外觀模式的意圖是簡化接口,而適配器的意圖是將接口轉(zhuǎn)換成不同的接口

          總結(jié)

          從上面的示例代碼,以及我們舉的生活中的例子,我們可以很清楚地看到,外觀模式本質(zhì)上就是整合接口,為客戶端提供一個(gè)更簡潔的接口。現(xiàn)實(shí)生活中,外觀模式的例子還有很多,特別是在現(xiàn)在這種智能時(shí)代,比如小愛同學(xué)、小度以及我們的手機(jī)智能助手等,都是典型的外觀模式。從這一點(diǎn)上來講,人工智能確實(shí)改變了我們的生活,讓生活的繁雜開始變得簡單,語音搜索、語音控制各類電器……萬物互聯(lián),真的是指日可待!

          好了,關(guān)于外觀模式我們就說這么多,總體來看這塊的內(nèi)容也確實(shí)不過。

          - END -


          瀏覽 32
          點(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>
                  欧美性爱视频福利 | 8xxxxx操 | 家庭乱伦免费无码视频 | 亚洲精品色婷婷 | 俺也去在线视频 |