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

          這個(gè)設(shè)計(jì)模式,一看就懂!

          共 1708字,需瀏覽 4分鐘

           ·

          2021-10-29 16:30

          今天要講的設(shè)計(jì)模式堪稱人人都會(huì),不是因?yàn)樗?jiǎn)單,而是因?yàn)樗R?,它就?適配器模式

          這個(gè)玩意大家應(yīng)該都認(rèn)識(shí),它是一個(gè)耳機(jī)轉(zhuǎn)接頭

          dd0b974e430da71fb8ca673de5b16bf9.webp

          假如你只有一個(gè)圓孔插頭的耳機(jī),但是手機(jī)的音頻插口是type-c的,這時(shí)候你是沒辦法用耳機(jī)聽歌的

          利用耳機(jī)轉(zhuǎn)接頭,就可以使用圓孔的插頭和type-c插口的手機(jī)來(lái)聽歌

          在我們對(duì)接一個(gè)三方系統(tǒng)時(shí),假如我們系統(tǒng)的接口規(guī)范和三方系統(tǒng)的接口規(guī)范不一樣,該怎么對(duì)接

          802d179bf09fdca46b801b2eb171ca84.webp

          接口規(guī)范不一致,導(dǎo)致我們不能和三方系統(tǒng)完成對(duì)接,必須修改其中一方的接口規(guī)范

          但是,不管修改哪一方的接口規(guī)范都可能導(dǎo)致系統(tǒng)已有的功能不能正常使用

          讓我們發(fā)揮想象,把我們系統(tǒng)比作是圓孔耳機(jī),把三方系統(tǒng)比作是type-c插口的手機(jī)。我們只需要一個(gè)「耳機(jī)轉(zhuǎn)接頭」就可以完成兩個(gè)系統(tǒng)的對(duì)接,而且不需要修改任何一方的代碼

          836d03e37678928fb4ece5b24e1cfac7.webp

          這里的「耳機(jī)轉(zhuǎn)接頭」的作用就是把我們系統(tǒng)的接口規(guī)范轉(zhuǎn)換成三方系統(tǒng)的接口規(guī)范,讓兩個(gè)系統(tǒng)都不需要修改代碼就可以完成無(wú)縫對(duì)接

          仔細(xì)想想一下,在我們的實(shí)際工作中,是不是經(jīng)常做「耳機(jī)轉(zhuǎn)接頭」這樣的工作

          實(shí)際上,「耳機(jī)轉(zhuǎn)接頭」就是一個(gè)適配器,這就是一個(gè)簡(jiǎn)單的「適配器模式」

          系統(tǒng)間的調(diào)用會(huì)用到適配器模式,代碼直接的調(diào)用也會(huì)用到適配器模式

          使用場(chǎng)景

          在兩個(gè)功能間無(wú)法完成無(wú)縫對(duì)接,必須要修改其中一處功能,但是修改工作量較大或者擔(dān)心修改完造成已有功能無(wú)法使用時(shí),可以考慮使用適配器模式

          適配器模式的識(shí)別方法:「當(dāng)一個(gè)方法的入?yún)⑹且粋€(gè)對(duì)象,而返回值是另一個(gè)對(duì)象時(shí),這個(gè)方法就是一個(gè)適配器模式」

          比如,java中的 java.util.Arrays#asList()

          7ae46a0ee24bca47b8e553a459442aab.webp

          這個(gè)方法的作用是把一個(gè)數(shù)組轉(zhuǎn)換成list集合。數(shù)組和list屬于兩個(gè)不同的類,沒辦法完成無(wú)縫轉(zhuǎn)換

          這時(shí)候就需要這個(gè)方法來(lái)進(jìn)行「適配」,它的入?yún)⑹且粋€(gè)任意類型的數(shù)組對(duì)象,返回值是一個(gè)list對(duì)象,符合上面我們說(shuō)的適配器模式的識(shí)別方法,所以這個(gè)方法就是一個(gè)適配器模式

          實(shí)際案例

          假如我們有一個(gè)接口,需要統(tǒng)計(jì)用戶最近購(gòu)買的商品信息并返回給前臺(tái)

          查詢數(shù)據(jù)庫(kù)的方法已經(jīng)封裝好,返回的數(shù)據(jù)格式如下

          8d8870f86472640ec3691214d0720bcf.webp

          前臺(tái)要求返回的數(shù)據(jù)格式如下

          e6397027e1fe48d54afcb0610cc710fb.webp

          我們先來(lái)用代碼模擬一下從數(shù)據(jù)庫(kù)查詢數(shù)據(jù)的邏輯

          這里需要一個(gè)實(shí)體類,用來(lái)對(duì)應(yīng)數(shù)據(jù)庫(kù)查詢出來(lái)的數(shù)據(jù)

          829daffe7b0ea4f5f728a76a5467a8b8.webp

          用代碼模擬從數(shù)據(jù)庫(kù)查詢出5條數(shù)據(jù)

          a5570fff3430c9c8702b57e6eff0648e.webp

          再來(lái)模擬一下前臺(tái)要求的數(shù)據(jù)格式

          這里需要兩個(gè)實(shí)體類對(duì)應(yīng)前臺(tái)要求的數(shù)據(jù)格式

          d39a46a4b26a6917e4db14b4d25ded1b.webp

          用代碼來(lái)模擬一下實(shí)際給前臺(tái)返回?cái)?shù)據(jù)的邏輯

          778c9c87c0fb6753e8fad7bcb6dd2447.webp

          從數(shù)據(jù)庫(kù)查詢出來(lái)的數(shù)據(jù)和前臺(tái)要求的數(shù)據(jù)都用代碼模擬出來(lái)了,那么該怎么把從數(shù)據(jù)庫(kù)查詢出來(lái)的格式轉(zhuǎn)換成前臺(tái)需要的格式?

          也就是說(shuō)要怎么把List對(duì)象轉(zhuǎn)換成List對(duì)象?

          994db9099d0627f1eedccf19b3c57c2c.webp

          修改查詢數(shù)據(jù)庫(kù)的方法邏輯顯然不合適,作為DAO層對(duì)所有業(yè)務(wù)提供通用的查詢數(shù)據(jù)庫(kù)的能力,修改后會(huì)導(dǎo)致其他調(diào)用該方法的業(yè)務(wù)報(bào)錯(cuò)

          修改前臺(tái)數(shù)據(jù)格式也不合適,前臺(tái)開發(fā)模式是一云多端的模式,不可能讓所有端的前臺(tái)都跟著修改代碼

          所以,該適配器模式出場(chǎng)啦

          我們需要定義一個(gè)方法,方法的入?yún)⑹?/span>List,方法的返回值是List,在這個(gè)方法中完成兩個(gè)對(duì)象的轉(zhuǎn)換

          ps:該方法的業(yè)務(wù)邏輯稍微有點(diǎn)復(fù)雜,感興趣的同學(xué)可以看一下。不愿意看也行,只看方法的入?yún)⒑头祷刂狄膊挥绊憣?duì)適配器模式的理解

          87e97001cb528f4b10550a544f106eac.webp

          這樣我們就用適配器模式完成了兩個(gè)對(duì)象的轉(zhuǎn)換,而且兩方的業(yè)務(wù)邏輯都不需要修改,堪稱“完美”

          總結(jié)

          適配器模式又被稱為包裝模式或封裝器模式

          當(dāng)兩個(gè)功能間無(wú)法完成無(wú)縫對(duì)接,必須要修改其中一處功能,但是修改工作量較大或者擔(dān)心修改完造成已有功能無(wú)法使用時(shí),可以考慮使用適配器模式

          「適配器模式的優(yōu)點(diǎn)」

          • 解耦:適配器將兩個(gè)功能完全解耦,從而達(dá)到不需要修改任何一方的原有邏輯的目的
          • 提高代碼復(fù)用性:適配的兩方不需要修改任何邏輯,可以更專注自己本身的業(yè)務(wù)邏輯,對(duì)外提供更通用的能力,使代碼的復(fù)用性更好
          • 提高系統(tǒng)的擴(kuò)展性:可以通過(guò)各種適配器,對(duì)已有的功能或系統(tǒng)進(jìn)行適配,讓其能適應(yīng)更多的場(chǎng)景,使自己的功能或系統(tǒng)擴(kuò)展性更高

          「適配器模式的缺點(diǎn)」

          • 造成系統(tǒng)結(jié)構(gòu)混亂:過(guò)多的使用適配器,會(huì)造成系統(tǒng)過(guò)于龐大且混亂不利于系統(tǒng)維護(hù)

          學(xué)會(huì)設(shè)計(jì)模式不是目的,理解設(shè)計(jì)模式隱含的設(shè)計(jì)思想才能無(wú)往不利

          「技術(shù)需要沉淀,我們下期再見」


          瀏覽 47
          點(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>
                  AV国产在线观看 | 在线中文字幕亚洲三级片 | 日韩无码 国产精品 | 亚洲一级a | 免费看成人747474九号视频在线观看 |