成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

設計模式系列之適配器模式

開發 架構
適配器模式是一種結構型設計模式, 它能使接口不兼容的對象能夠相互合作。

[[382058]]

本文轉載自微信公眾號「狼王編程」,作者狼王。轉載本文請聯系狼王編程公眾號。  

1、概述

適配器模式是一種結構型設計模式, 它能使接口不兼容的對象能夠相互合作。

2、適用場景

1)當你希望使用某個類, 但是其接口與其他代碼不兼容時, 可以使用適配器類。

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

3、實例

有以下場景:

方釘適配圓孔的適配器,方釘想放到圓孔中,則圓孔的直徑等于方釘的對角長度。

  1. 方釘適配圓孔的適配器,方釘想放到圓孔中,則圓孔的直徑等于方釘的對角長度。 
  2.  
  3. 定義方釘、圓孔 
  4.  
  5. 圓孔: 
  6. 直徑 
  7.  
  8. 圓釘: 
  9. 直徑 
  10.  
  11. 方釘: 
  12. 邊長 

定義方釘:

  1. public class SquareNails { 
  2.  
  3.     public double getWidth() { 
  4.         return width; 
  5.     } 
  6.  
  7.     public void setWidth(double width) { 
  8.         this.width = width; 
  9.     } 
  10.  
  11.     public SquareNails(double width) { 
  12.         this.width = width; 
  13.     } 
  14.  
  15.     /** 
  16.      * 邊長 
  17.      */ 
  18.     private double width; 
  19.  

定義圓釘:

  1. public class RoundNails { 
  2.  
  3.     /** 
  4.      * 直徑 
  5.      */ 
  6.     private double diameter; 
  7.  
  8.     public double getDiameter() { 
  9.         return diameter; 
  10.     } 
  11.  
  12.     public void setDiameter(double diameter) { 
  13.         this.diameter = diameter; 
  14.     } 
  15.  
  16.     public RoundNails(double diameter) { 
  17.         this.diameter = diameter; 
  18.     } 

定義圓孔:

  1. public class RoundHold { 
  2.  
  3.     /** 
  4.      * 直徑 
  5.      */ 
  6.     private double diameter; 
  7.  
  8.     public RoundHold(double diameter) { 
  9.         this.diameter = diameter; 
  10.     } 
  11.  
  12.     public double getDiameter() { 
  13.         return diameter; 
  14.     } 
  15.  
  16.     public void setDiameter(double diameter) { 
  17.         this.diameter = diameter; 
  18.     } 
  19.  
  20.     /** 
  21.      * 校驗是否合適 
  22.      * @param roundNails 
  23.      * @return 
  24.      */ 
  25.     public boolean fits(RoundNails roundNails){ 
  26.         if (diameter >= roundNails.getDiameter()){ 
  27.             return true
  28.         }else { 
  29.             return false
  30.         } 
  31.  
  32.     } 

定義適配器:

  1. public class SquareNailsRoundHoldAdapter { 
  2.  
  3.     public RoundNails getResult(SquareNails squareNails){ 
  4.         double width = squareNails.getWidth(); 
  5.         double diagonal = width * Math.sqrt(2); 
  6.         RoundNails roundNails = new RoundNails(diagonal); 
  7.         return roundNails; 
  8.     } 

測試類:

  1. @RunWith(SpringRunner.class) 
  2. @SpringBootTest(classes = TestApplication.class) 
  3. public class TestDemo { 
  4.  
  5.     @Test 
  6.     public void test() { 
  7.         //定義個圓孔 
  8.         RoundHold roundHold = new RoundHold(10); 
  9.         //定義圓釘 
  10.         RoundNails roundNails = new RoundNails(10); 
  11.         //定義方釘,邊距10 
  12.         SquareNails squareNails10 = new SquareNails(10); 
  13.         //定義方釘,邊距6 
  14.         SquareNails squareNails6 = new SquareNails(6); 
  15.         //適配器 
  16.         SquareNailsRoundHoldAdapter squareNailsRoundHoldAdapter = new SquareNailsRoundHoldAdapter(); 
  17.         RoundNails result10 = squareNailsRoundHoldAdapter.getResult(squareNails10); 
  18.         RoundNails result6 = squareNailsRoundHoldAdapter.getResult(squareNails6); 
  19.         //圓釘是否合適 
  20.         if (roundHold.fits(roundNails)) { 
  21.             System.out.println("this round nails is fits"); 
  22.         } else { 
  23.             System.out.println("this round nails is does not fits"); 
  24.         } 
  25.         //10方釘是否合適 
  26.         if (roundHold.fits(result10)) { 
  27.             System.out.println("squareNails10 is fits"); 
  28.         } else { 
  29.             System.out.println("squareNails10 is does not fits"); 
  30.         } 
  31.         //6方釘是否合適 
  32.         if (roundHold.fits(result6)) { 
  33.             System.out.println("squareNails6 is fits"); 
  34.         } else { 
  35.             System.out.println("squareNails6 is does not fits"); 
  36.         } 
  37.     } 

結果:

  1. this round nails is fits 
  2. squareNails10 is does not fits 
  3. squareNails6 is fits 

4、總結

優點:

1)單一原則:將代碼或者數據轉換的過程從主要業務邏輯區分出來。

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

缺點:

增加代碼復雜度。使用時需要考慮是否在原功能上修改更加簡單。

 

責任編輯:武曉燕 來源: 狼王編程
相關推薦

2020-10-25 08:56:21

適配器模式

2013-11-26 16:39:21

Android設計模式

2012-05-16 17:22:11

Java設計模式

2022-02-13 23:33:24

設計模式Java

2012-04-12 09:33:02

JavaScript

2022-02-18 17:21:29

適配器模式客戶端

2024-07-31 10:41:16

C#設計模式

2024-02-22 12:13:49

適配器模式代碼

2021-08-16 17:15:19

設計模式Android適配器模式

2013-02-26 10:55:47

C#適配器設計模式

2024-04-10 12:27:43

Python設計模式開發

2012-08-02 10:46:34

JavaAdapter模式

2022-12-12 09:20:59

適配器模式接口

2009-11-18 18:08:20

PHP適配器模式

2022-05-29 22:55:00

適配器設計模式

2021-02-16 08:16:09

適配器模式MybatisJava

2023-08-15 11:07:37

適配器模式TypeScript

2014-07-17 10:55:10

Win8.1應用開發適配器模式

2021-06-09 08:53:34

設計模式策略模式工廠模式

2012-01-13 15:59:07

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩一级免费电影 | 男人av在线播放 | 91av小视频| 免费av观看 | 91久久精品国产91久久性色tv | 欧美 日韩 国产 成人 在线 91 | 亚洲午夜av久久乱码 | 日韩国产欧美一区 | 欧美性猛片aaaaaaa做受 | 国产免费自拍 | 日韩精品一区二区三区中文在线 | 国产精品69毛片高清亚洲 | 密乳av| 黄色网址在线免费播放 | 成人免费视频播放 | 中文二区| 日韩成人免费视频 | 久久精品久久久久久 | 久久精品a级毛片 | 久久国产精品久久久久久久久久 | 免费一区二区三区 | 手机在线一区二区三区 | 欧美日韩国产一区二区三区 | 国产高潮av| 91精品国产综合久久福利软件 | 美国一级毛片a | 青久草视频 | 日韩有码一区 | 一区二区视频在线 | www.国产一区 | 狠狠干在线 | 国产精品永久免费视频 | 国产一区二区三区精品久久久 | av黄色在线播放 | 欧美日韩国产不卡 | 天天澡天天狠天天天做 | 国产精品电影网 | 精品国产一区二区三区免费 | 男人天堂99 | 亚洲区一区二 | 亚洲三区在线观看 |