日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

设计模式-适配器模式(类适配器、对象适配器、接口适配器详解)

發布時間:2023/12/18 asp.net 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式-适配器模式(类适配器、对象适配器、接口适配器详解) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 適配器模式
  • 類適配器
  • 對象適配器
  • 接口適配器
  • 總結


適配器模式


適配器模式(Adapter Pattern)將某個類的接口轉換成客戶端期望的另一個接口表示,主的目的是兼容性,讓原本因接口不匹配不能一起工作的兩個類可以協同工作。也稱包裝器(Wrapper),屬于結構型模式。適配器模式主要分為三類:類適配器模式、對象適配器模式、接口適配器模式

工作原理
將一個類的接口轉換成另一種接口,讓原本接口不兼容的類可以兼容。從用戶的角度看不到被適配者,是解耦的/。用戶調用適配器轉化出來的目標接口方法,適配器再調用被適配者的相關接口方法,用戶收到反饋結果,感覺只是和目標接口交互。

簡單來說,適配器模式就像個插頭轉換器,讓不同標準的插頭和插座可以一起使用,而插座就是原來的接口,插頭是用戶期望的接口。或者類比電源適配器,把原來的220V電壓轉換成5V電壓等。

類適配器


顧名思義,通過適配器通過類來實現,以類來繼承和實現接口的方式,來獲取被適配類的信息并轉換輸出重寫到適配接口。即Adapter類,通過繼承src類,實現dst類接口,完成src->dst的適配。

//被適配的類 public class Voltage220V {public int output220V() {int src = 220;System.out.println("電壓=" + src);return src;} }//適配接口 public interface IVoltage5V {public int output5V(); }//適配器類 public class VoltageAdapter extends Voltage220V implements IVoltage5V {@Overridepublic int output5V() {// TODO Auto-generated method stub//獲取220V電壓int srcV = output220V();int dstV = srcV / 44 ; //轉成5vreturn dstV;} }//調用 public class Phone {public void charging(IVoltage5V iVoltage5V) {if(iVoltage5V.output5V() == 5) {System.out.println("電壓是5v,可以充電"); } else if (iVoltage5V.output5V() > 5) {System.out.println("電壓大于5v,不可充電");}} }//測試 public class Client {public static void main(String[] args) {System.out.println("===類適配器測試===");Phone phone = new Phone();phone.charging(new VoltageAdapter());} }

優缺點:

  • 有一定局限性。因為類適配器需要繼承src類,而Java是單繼承機制,所以要求dst必須是接口。
  • src類的方法在Adapter中都會暴露出來,耦合性高。
  • 可以根據需求重寫src類的方法,使得Adapter的靈活性增強了。
  • 對象適配器


    顧名思義,通過實例對象(構造器傳遞)來實現適配器,而不是再用繼承,其余基本同類適配器。即:持有src類,實現dst類接口,完成src->dst的適配。

    (插播反爬信息 )博主CSDN地址:https://wzlodq.blog.csdn.net/

    //被適配的類(不變) public class Voltage220V {public int output220V() {int src = 220;System.out.println("電壓=" + src);return src;} }//適配接口(不變) public interface IVoltage5V {public int output5V(); }//適配器類 public class VoltageAdapter implements IVoltage5V {private Voltage220V voltage220V;//構造器public VoltageAdapter(Voltage220V voltage220v) {this.voltage220V = voltage220v;}@Overridepublic int output5V() {int dst = 0;if(null != voltage220V) {int src = voltage220V.output220V();//獲取220v電壓dst = src / 44;}return dst;} }//調用(不變) public class Phone {public void charging(IVoltage5V iVoltage5V) {if(iVoltage5V.output5V() == 5) {System.out.println("電壓是5v,可以充電"); } else if (iVoltage5V.output5V() > 5) {System.out.println("電壓大于5v,不可充電");}} }//測試 public class Client {public static void main(String[] args) {System.out.println("===對象適配器===");Phone phone = new Phone();VoltageAdapter VoltageAdapter = new VoltageAdapter(new Voltage220V());phone.charging(VoltageAdapter);} }

    優缺點:

  • 把繼承解耦,解決了類適配器必須繼承src的局限性問題,也不再要求dst必須是接口。
  • 成本低更靈活。
  • 接口適配器


    繼承那邊可以解耦了,那能不能從接口這邊解耦?

    接口適配器也稱缺省適配器模式,適用于一個接口不想使用其所有的方法的情況。當不需要全部實現接口提供的方法時,可先設計一個抽象類實現接口,并為該接口中每個方法提供一個默認實現(空方法),那么該抽象類的子類可有選擇地覆蓋父類的某些方法來實現需求。

    //被適配的類(不變) public class Voltage220V {public int output220V() {int src = 220;System.out.println("電壓=" + src);return src;} }//適配接口 public interface IVoltage5V {public int output5V();public void m2(); //接口里冗余不重要的方法public String m3(); } //抽象適配器 public abstract class AbsAdapter extends Voltage220V implements IVoltage5V{@Override //以空方法實現接口所有方法public int output5V() {return 0;}@Overridepublic void m2() {}@Overridepublic String m3() {return null;} }//調用(不變) public class Phone {public void charging(IVoltage5V iVoltage5V) {if(iVoltage5V.output5V() == 5) {System.out.println("電壓是5v,可以充電");} else if (iVoltage5V.output5V() > 5) {System.out.println("電壓大于5v,不可充電");}} }//測試 public class Client {public static void main(String[] args) {System.out.println("===接口適配器===");AbsAdapter absAdapter = new AbsAdapter() { //匿名內部類的形式@Override //按需要重寫接口方法public int output5V() {System.out.println("使用了output5V的方法");int srcV = output220V();int dstV = srcV / 44 ; //轉成5vreturn dstV;}};Phone phone = new Phone();phone.charging(absAdapter);} }


    優缺點:

  • 可以靈活方便的選擇性重寫接口方法。
  • 由于是匿名內部類的形式,所以不利于代碼復用。
  • 總結


    以上三種形式是根據src是以怎樣的形式給到Adapter來命名的:

  • 類適配器:以類給到,在Adapter里,就是將src當做類,繼承
  • 對象適配器:以對象給到,在Adapter里,將src作為一個對象,持有
  • 接口適配器:以接口給到,在Adapter里,將src作為一個接口,實現
  • Adapter模式最大的作用還是將原本不兼容的接口融合在一起工作,在實際開發中,實現起來不拘泥于我們講解的三種經典形式。

    原創不易,請勿轉載(本不富裕的訪問量雪上加霜 )
    博主首頁:https://wzlodq.blog.csdn.net/
    微信公眾號:吾仄lo咚鏘
    如果文章對你有幫助,記得一鍵三連?

    總結

    以上是生活随笔為你收集整理的设计模式-适配器模式(类适配器、对象适配器、接口适配器详解)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。