Java设计模式 - 适配器模式
概述
將一個類的接口轉換成客戶希望的另外一個接口。適配器模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。
構造器模式
上面的概述可能不是太容易理解,下面舉一個例子說明適配器模式的應用。
大家都知道,新款iPhone 7手機使用了扁口的Lightning接口耳機插槽,而舊款的3.5mm普通耳機是否就不能使用了呢?其實不然,iPhone 7配件中隨機附贈了一個小玩意,可直接將普通3.5mm耳機轉換為iPhone 7可使用的耳機。
而這個小配件就是一個適配器Adapter,iPhone 7就是目標接口Target,而普通的3.5mm耳機就是待適配者Adaptee。
轉接頭 - Adapter3.5mm耳機 - AdapteeiPhone 7 - Target再如,市面上出售的安卓數據線轉iPhone Lightning接口的轉換器,都可以被認為是一個Adapter,類似例子比比皆是。
其實,適配器模式的核心,就是使得接口完全不相干的兩個類可以協同工作。
1、類的適配器模式
/*** 帶有lightning耳機接口的iPhone7 [Target - 目標接口]*/ public interface IPhone7 {void listenWithLightning(); } /*** 普通3.5mm耳機 [Adaptee - 待適配者]*/ public abstract class Headphone {public abstract void listenWithCommon(); } /*** lightning to 3.5mm耳機 轉換器 [Adapter - 適配器]*/ public class HeadphoneAdapter extends Headphone implements IPhone7 {public void listenWithLightning() {}public void listenWithCommon() {} }HeadphoneAdapter 通過繼承一個類,然后實現一個新的接口,完成了 Headphone 與 IPhone7的兼容。
像上面這個結構,在Java開發中非常常見,這屬于類的適配器模式。
2、對象的適配器模式
還有一種基于對象的適配器模式,即對象的適配器模式。
將上面的 HeadphoneAdapter 類做如下修改:
/*** lightning to 3.5mm耳機 轉換器 [Adapter - 適配器]*/ public class HeadphoneAdapter implements IPhone7 {private Headphone headphone;public HeadphoneAdapter(Headphone headphone) {this.headphone = headphone;}public void listenWithLightning() {}public void listenWithCommon() {headphone.listenWithCommon();} }此時,HeadphoneAdapter 要將 Headphone 適配為 iPhone 7 可識別的耳機,直接持有該類的實例,調用該類的 listenWithCommon() 方法即可。 此為對象的適配器模式。
3、接口的適配器模式
適配器模式中的第三種模式也非常常見——接口的適配器模式。
當不希望實現一個接口中所有的方法時,可以創建一個抽象類繼承該接口,并實現空方法或默認方法,子類只需繼承該抽象類即可。
/*** 抽象適配器類*/ public abstract class Adapter extends Headphone implements IPhone7 {public void listenWithLightning() {} } /*** 具體適配器類*/ public class HeadphoneAdapter extends Adapter {public void listenWithCommon() {} }可以看到,HeadphoneAdapter 無需實現 listenWithLightning() 方法,該方法已由父類 Adapter 做了默認空實現。
Android中的適配器模式
public interface ListAdapter extends Adapter {//... } public interface SpinnerAdapter extends Adapter {//... } public abstract class BaseAdapter implements ListAdapter, SpinnerAdapter {//... }BaseAdapter 既實現了 ListView 的功能,也實現了 Spinner 的功能。
作者:Fynn_
鏈接:https://www.jianshu.com/p/3b1b7812aeea
來源:簡書
總結
以上是生活随笔為你收集整理的Java设计模式 - 适配器模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 说说 JAVA 代理模式
- 下一篇: 69道Java Spring 面试笔试题