簡介:【Java設計模式】接口型模式–Adapter(適配器)模式Adapter模式的宗旨就是:向客戶提供接口,并使用現有的類所提供的服務,以滿足客戶的需求。?或者說,現在有classA的方法滿足客戶的部分要求,將另一部分需求抽象
【Java 設計模式】接口型模式–Adapter(適配器)模式Adapter模式的宗旨就是:向客戶提供接口,并使用現有的類所提供的服務,以滿足客戶的需求。
或者說,現在有class A的方法滿足客戶的部分要求,將另一部分需求抽象為interface B,那么就要有Adapter來使得class A和interface B相互結合,滿足客戶全部需求。通俗的理解:在party上,我想去搭訕一個女生Jerry。但是我的英語很爛,于是我拿了個翻譯器,翻譯器就是我和Jerry之間的Adapter,讓我和Jerry可以很好的交談。一,類適配器
示例代碼public interface RequiredInterface {/*** 這是客戶需要的方法*/public void requireMethod();}123456public class ExistingClass {/*** 這是現有的方法*/public void usefulMethod(){}}1234567適配器角色Adapter擴展了ExistingClass ,同時又實現了RequiredInterface 接口。由于ExistingClass 沒有提供requireMethod()方法,而RequiredInterface 又要求這個方法,因此適配器角色Adapter實現了這個方法。public class Adapter extends ExistingClass implements RequiredInterface {/*** 由于源類ExistingClass沒有方法requireMethod()* 因此適配器補充上這個方法*/@Overridepublic void requireMethod() {//寫相關的代碼}}12345678910二,對象適配器?
類適配器通過創建子類來實現適配,在設計類適配器的時候,新的適配器類可以實現期望的接口,并擴展已有的類。而對象適配器則是用委托的方式。
有兩種方式,一種是實現接口的方式,一種是繼承類的方式。
實現目標接口
?
示例代碼public interface RequiredInterface {/*** 這是客戶需要的方法*/public void requireMethod();}123456public class ExistingClass {/*** 這是現有的方法*/public void usefulMethod(){}}1234567public class Adapter implements RequiredInterface{private ExistingClass exist;public Adapter(ExistingClass exist){this.exist = exist;}/*** 源類ExistingClass有方法usefulMethod* 因此適配器類直接委派即可*/public void usefulMethod(){this.exist.usefulMethod();}/*** 由于源類ExistingClass沒有方法requireMethod()* 因此適配器補充上這個方法*/@Overridepublic void requireMethod() {//寫相關的代碼}}12345678910111213141516171819202122繼承目標類
?
示例代碼public class RequiredClass {/*** 這是客戶需要的方法*/public void requireMethod();}123456public class ExistingClass {/*** 這是現有的方法*/public void usefulMethod(){}}1234567public class Adapter extends RequiredClass {private ExistingClass exist;public Adapter(ExistingClass exist){this.exist = exist;}/*** 源類ExistingClass有方法usefulMethod* 因此適配器類直接委派即可*/public void usefulMethod(){this.exist.usefulMethod();}/*** 由于源類ExistingClass沒有方法requireMethod()* 因此適配器補充上這個方法*/public void requireMethod() {//寫相關的代碼}}123456789101112131415161718192021三,接口的適配器模式
接口的適配器是這樣的:有時我們寫的一個接口中有多個抽象方法,當我們寫該接口的實現類時,必須實現該接口的所有方法,這明顯有時比較浪費,因為并不是所有的方法都是我們需要的,有時只需要某一些,
此處為了解決這個問題,我們引入了接口的適配器模式,借助于一個抽象類,該抽象類實現了該接口,實現了所有的方法,而我們不和原始的接口打交道,只和該抽象類取得聯系,所以我們寫一個類,繼承該抽象類,重寫我們需要的方法就行。
示例代碼public interface RequiredInterface{public void requireMethod1();public void requireMethod2();} 12345public abstract class AbstractRequiredClass implements RequiredInterface{public void requireMethod1(){}public void requireMethod2(){}} 12345public class Adapter1 extends AbstractRequiredClass {public void requireMethod1(){System.out.println("the RequiredInterface interface's first requireMethod1!");}} 12345public class Adapter2 extends AbstractRequiredClass {public void requireMethod2(){System.out.println("the RequiredInterface interface's first requireMethod2!");}} 12345個人覺得適配器模式中的這三種模式是挺靈活的,比如:復用性,系統需要使用現有的類,而此類的接口不符合系統的需要。那么通過適配器模式就可以讓這些功能得到更好的復用。還有擴展性在實現適配器功能的時候,可以調用自己開發的功能,從而自然地擴展系統的功能。?
不過在使用適配器時,也要注意到除非對系統的架構很清楚,否則過多的使用適配器,會讓系統非常零亂,不易整體進行把握。