站長資訊網
        最全最豐富的資訊網站

        Java設計模式解析之適配器模式(實例詳解)

        本篇文章給大家帶來了關于java的相關知識,其中主要介紹了設計模式相關問題,主要講了其中的適配器模式,適配器模式主要用于將一個類的接口轉化成客戶端希望的目標類格式,使得原本不兼容的類可以在一起工作,將目標類和適配者類解耦,希望對大家有幫助。

        Java設計模式解析之適配器模式(實例詳解)

        推薦學習:《java視頻教程》

        一、什么是適配器模式:

        適配器模式主要用于將一個類的接口轉化成客戶端希望的目標類格式,使得原本不兼容的類可以在一起工作,將目標類和適配者類解耦;同時也符合“開閉原則”,可以在不修改原代碼的基礎上增加新的適配器類;將具體的實現封裝在適配者類中,對于客戶端類來說是透明的,而且提高了適配者的復用性但是缺點在于更換適配器的實現過程比較復雜。

        所以,適配器模式比較適合以下場景:

        • (1)系統需要使用現有的類,而這些類的接口不符合系統的接口。
        • (2)使用第三方組件,組件接口定義和自己定義的不同,不希望修改自己的接口,但是要使用第三方組件接口的功能。

        下面兩個非常形象的例子很好地說明了什么是適配器模式:

        Java設計模式解析之適配器模式(實例詳解)

        Java設計模式解析之適配器模式(實例詳解)

        二、適配器模式的三種實現方式:

        適配器模式主要分成三類:類的適配器模式、對象的適配器模式、接口的適配器模式。

        1、類的適配器模式:

        Java設計模式解析之適配器模式(實例詳解)

        • 目標接口(Target):客戶所期待的接口。目標可以是具體的或抽象的類,也可以是接口。
        • 需要適配的類(Adaptee):需要適配的類或適配者類。
        • 適配器(Adapter):通過包裝一個需要適配的對象,把原接口轉換成目標接口。
        // 已存在的、具有特殊功能、但不符合我們既有的標準接口的類 class Adaptee { 	public void specificRequest() { 		System.out.println("被適配類具有 特殊功能..."); 	} }   // 目標接口,或稱為標準接口 interface Target { 	public void request(); }   // 具體目標類,只提供普通功能 class ConcreteTarget implements Target { 	public void request() { 		System.out.println("普通類 具有 普通功能..."); 	} }   // 適配器類,繼承了被適配類,同時實現標準接口 class Adapter extends Adaptee implements Target{ 	public void request() { 		super.specificRequest(); 	} }   // 測試類public class Client { 	public static void main(String[] args) { 		// 使用普通功能類 		Target concreteTarget = new ConcreteTarget(); 		concreteTarget.request(); 		 		// 使用特殊功能類,即適配類 		Target adapter = new Adapter(); 		adapter.request(); 	} }

        運行結果:

        普通類 具有 普通功能... 被適配類具有 特殊功能...

        2、對象的適配器模式:

        Java設計模式解析之適配器模式(實例詳解)

        // 適配器類,直接關聯被適配類,同時實現標準接口 class Adapter implements Target{ 	// 直接關聯被適配類 	private Adaptee adaptee; 	 	// 可以通過構造函數傳入具體需要適配的被適配類對象 	public Adapter (Adaptee adaptee) { 		this.adaptee = adaptee; 	} 	 	public void request() { 		// 這里是使用委托的方式完成特殊功能 		this.adaptee.specificRequest(); 	} }   // 測試類 public class Client { 	public static void main(String[] args) { 		// 使用普通功能類 		Target concreteTarget = new ConcreteTarget(); 		concreteTarget.request(); 		 		// 使用特殊功能類,即適配類, 		// 需要先創建一個被適配類的對象作為參數 		Target adapter = new Adapter(new Adaptee()); 		adapter.request(); 	} }

        測試結果與上面的一致。從類圖中我們也知道需要修改的只不過就是 Adapter 類的內部結構,即 Adapter 自身必須先擁有一個被適配類的對象,再把具體的特殊功能委托給這個對象來實現。使用對象適配器模式,可以使得 Adapter 類(適配類)根據傳入的 Adaptee 對象達到適配多個不同被適配類的功能,當然,此時我們可以為多個被適配類提取出一個接口或抽象類。這樣看起來的話,似乎對象適配器模式更加靈活一點。

        3、接口的適配器模式:

        有時我們寫的一個接口中有多個抽象方法,當我們寫該接口的實現類時,必須實現該接口的所有方法,這明顯有時比較浪費,因為并不是所有的方法都是我們需要的,有時只需要某一些,此處為了解決這個問題,我們引入了接口的適配器模式,借助于一個抽象類,該抽象類實現了該接口,實現了所有的方法,而我們不和原始的接口打交道,只和該抽象類取得聯系,所以我們寫一個類,繼承該抽象類,重寫我們需要的方法就行。看一下類圖:

        Java設計模式解析之適配器模式(實例詳解)

        這個很好理解,在實際開發中,我們也常會遇到這種接口中定義了太多的方法,以致于有時我們在一些實現類中并不是都需要。看代碼:

        public interface Sourceable { 	 	public void method1(); 	public void method2(); }

        抽象類Wrapper2:

        public abstract class Wrapper2 implements Sourceable{ 	 	public void method1(){} 	public void method2(){} }  public class SourceSub1 extends Wrapper2 { 	public void method1(){ 		System.out.println("the sourceable interface's first Sub1!"); 	} }  public class SourceSub2 extends Wrapper2 { 	public void method1(){ 		System.out.println("the sourceable interface's second Sub2!"); 	} }
        public class WrapperTest {   	public static void main(String[] args) { 		Sourceable source1 = new SourceSub1(); 		Sourceable source2 = new SourceSub2(); 		 		source1.method1(); 		source1.method2(); 		source2.method1(); 		source2.method2(); 	} }

        運行結果:

        the sourceable interface's first Sub1! the sourceable interface's second Sub2!

        推薦學習:《java視頻教程》

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 亚洲av日韩精品久久久久久a| 蜜臀久久99精品久久久久久小说| 亚洲精品欧美精品日韩精品 | 久久久精品人妻一区二区三区四| 91精品成人免费国产片| 日韩精品久久久久久久电影蜜臀| 久久精品无码一区二区三区免费| 色综合久久精品中文字幕首页| 国产伦精品一区二区三区| 精品亚洲视频在线观看| 99热都是精品久久久久久| 国产精品999| 国产精品亚洲日韩欧美色窝窝色欲| 少妇亚洲免费精品| 久草热8精品视频在线观看| 91久久精品无码一区二区毛片| 91精品国产福利在线导航| 精品综合久久久久久888蜜芽| 亚洲精品卡2卡3卡4卡5卡区| 欧美精品亚洲人成在线观看| 精品国产一区二区三区在线观看| 2023国产精品自拍| 久久久精品一区二区三区| 成人国内精品久久久久影院| 国产成人精品免费久久久久| 国产在线精品无码二区| 日韩精品一区二区亚洲AV观看| 亚洲欧美国产精品专区久久| 日本精品自产拍在线观看中文 | 99久久精品费精品国产| 精品一区二区久久| 51视频国产精品一区二区 | 无码人妻精品一区二区在线视频| 欧美亚洲另类精品第一页| 精品国产不卡一区二区三区| 国产精品制服丝袜亚洲欧美| 国产精品∧v在线观看| 国产乱人伦偷精品视频 | 一级成人精品h| 国产精品高清2021在线| 国产亚州精品女人久久久久久|