溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

設(shè)計(jì)模式系列之什么是適配器模式

發(fā)布時(shí)間:2021-10-19 09:16:25 來源:億速云 閱讀:113 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“設(shè)計(jì)模式系列之什么是適配器模式”,在日常操作中,相信很多人在設(shè)計(jì)模式系列之什么是適配器模式問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”設(shè)計(jì)模式系列之什么是適配器模式”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

1、概述

適配器模式是一種結(jié)構(gòu)型設(shè)計(jì)模式, 它能使接口不兼容的對(duì)象能夠相互合作。

2、適用場(chǎng)景

1)當(dāng)你希望使用某個(gè)類, 但是其接口與其他代碼不兼容時(shí), 可以使用適配器類。

2)如果您需要使用這樣一些類, 他們處于同一個(gè)繼承體系, 并且他們又有了額外的一些共同的方法,  但是這些共同的方法不是所有在這一繼承體系中的子類所具有的共性。可以將這些方法封裝在一個(gè)裝飾器中。

3、實(shí)例

有以下場(chǎng)景:

方釘適配圓孔的適配器,方釘想放到圓孔中,則圓孔的直徑等于方釘?shù)膶?duì)角長(zhǎng)度。

方釘適配圓孔的適配器,方釘想放到圓孔中,則圓孔的直徑等于方釘?shù)膶?duì)角長(zhǎng)度。  定義方釘、圓孔  圓孔: 直徑  圓釘: 直徑  方釘: 邊長(zhǎng)

定義方釘:

public class SquareNails {      public double getWidth() {         return width;     }      public void setWidth(double width) {         this.width = width;     }      public SquareNails(double width) {         this.width = width;     }      /**      * 邊長(zhǎng)      */     private double width;  }

定義圓釘:

public class RoundNails {      /**      * 直徑      */     private double diameter;      public double getDiameter() {         return diameter;     }      public void setDiameter(double diameter) {         this.diameter = diameter;     }      public RoundNails(double diameter) {         this.diameter = diameter;     } }

定義圓孔:

public class RoundHold {      /**      * 直徑      */     private double diameter;      public RoundHold(double diameter) {         this.diameter = diameter;     }      public double getDiameter() {         return diameter;     }      public void setDiameter(double diameter) {         this.diameter = diameter;     }      /**      * 校驗(yàn)是否合適      * @param roundNails      * @return      */     public boolean fits(RoundNails roundNails){         if (diameter >= roundNails.getDiameter()){             return true;         }else {             return false;         }      } }

定義適配器:

public class SquareNailsRoundHoldAdapter {      public RoundNails getResult(SquareNails squareNails){         double width = squareNails.getWidth();         double diagonal = width * Math.sqrt(2);         RoundNails roundNails = new RoundNails(diagonal);         return roundNails;     } }

測(cè)試類:

@RunWith(SpringRunner.class) @SpringBootTest(classes = TestApplication.class) public class TestDemo {      @Test     public void test() {         //定義個(gè)圓孔         RoundHold roundHold = new RoundHold(10);         //定義圓釘         RoundNails roundNails = new RoundNails(10);         //定義方釘,邊距10         SquareNails squareNails10 = new SquareNails(10);         //定義方釘,邊距6         SquareNails squareNails6 = new SquareNails(6);         //適配器         SquareNailsRoundHoldAdapter squareNailsRoundHoldAdapter = new SquareNailsRoundHoldAdapter();         RoundNails result10 = squareNailsRoundHoldAdapter.getResult(squareNails10);         RoundNails result6 = squareNailsRoundHoldAdapter.getResult(squareNails6);         //圓釘是否合適         if (roundHold.fits(roundNails)) {             System.out.println("this round nails is fits");         } else {             System.out.println("this round nails is does not fits");         }         //10方釘是否合適         if (roundHold.fits(result10)) {             System.out.println("squareNails10 is fits");         } else {             System.out.println("squareNails10 is does not fits");         }         //6方釘是否合適         if (roundHold.fits(result6)) {             System.out.println("squareNails6 is fits");         } else {             System.out.println("squareNails6 is does not fits");         }     } }

結(jié)果:

this round nails is fits squareNails10 is does not fits squareNails6 is fits

4、總結(jié)

優(yōu)點(diǎn):

1)單一原則:將代碼或者數(shù)據(jù)轉(zhuǎn)換的過程從主要業(yè)務(wù)邏輯區(qū)分出來。

2)開閉原則:只要客戶端代碼通過客戶端接口與適配器進(jìn)行交互, 你就能在不修改現(xiàn)有客戶端代碼的情況下在程序中添加新類型的適配器。

缺點(diǎn):

增加代碼復(fù)雜度。使用時(shí)需要考慮是否在原功能上修改更加簡(jiǎn)單。

到此,關(guān)于“設(shè)計(jì)模式系列之什么是適配器模式”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI