『設計模式』適配器模式(Adapter)

適配器模式(Adapter)

適配器模式把一一個類的接口變換成客戶端所期待的另一種接口,從而使原本接口不匹配而無法在一起工作的兩個類能夠在一起工作。

實際上就是對類或者對象,找到一個翻譯,能夠使得源對象能夠匹配到現對象。

軟件系統設計和開發的問題

在軟件系統設計和開發中,這種問題也會經常遇到:
有時爲了完成某項工作購買了一個第三方的庫來加快開發。這就帶來了一個問題:我們在應用程序中已經設計好了接口,與這個第三方提供的接口不一致,爲了使得這些接口不兼容的類(不能在-起工作)可以在一起工作,Adapter模式提供了將一個類(第三方庫)的接口轉化爲客戶(購買使用者)希望接口的方法。

兩種形式

  • 類的適配器模式
  • 對象的適配器模式

適配器模式結構

在這裏插入圖片描述
從圖中可以看出:客戶端需要調用Request方法,而Adaptee沒有該方法,爲了使客戶端能夠使用Adaptee類,需要提供一個包裝(Wrapper) 類Adapter。這個包裝類包裝了一個Adaptee 的實例,從而將客戶端與Adaptee銜接起來。由於Adapter與Adaptee是委派(組合)關係,這決定了這個適配器模式是對象的。

  • 目標(Target)角色這是客戶所期待的接口。目標可以是具體的或抽象的類也可以是接口。
  • 源(Adaptee)角色需要適配的類
  • 適配器(Adapter)角色通過在內部包裝(Wrap)一個Adaptee對象,把源接口轉換成目標接口。

實現要點

  • Adapter模式主要應用於“希望複用一些現存的類,但是接口又與複用環境要求不一致的情況”,在遺留代碼複用、類庫遷移等方面非常有用。
  • Adapter模式有對象適配器和類適配器兩種形式的實現結構
    類適配器採用“多繼承”的實現方式帶來了不良的高耦合,所以一般不推薦使用。
    對象適配器採用“對象組合”的方式,更符合松耦合精神。

使用情況

  • 系統需要使用現有的類,而此類的接口不符合系統的需要。
  • 想要建立一個有以重複使用的類,該類可能與其它不相關的類或不可預見的類(即那些接口可能不一定兼容的類)協同工作。
  • (對對象適配器而言)在設計裏,你想使用一些已經存在的子類,但是不可能對每一個子類都進行適配。對象適配器可以適配它們的父類接口(使用的擴展)。

優點

  • 更好的複用性
  • 更好的可擴展性
    在實現適配器功能的時候,可以調用自己開發的功能,從而自然地擴展系統的功能

缺點

過多地使用適配器,會讓系統非常凌亂,不容易整體進行把握。

本質

轉換匹配,複用功能。

實現

用戶能看到的接口

package 適配器模式;

public class Target {
	public void Reuqest() 
	{
		System.out.println("一般請求");
	}
}

需要適配的類

package 適配器模式;

public class Adaptee {
	public void specifiRequest()
	{
		System.out.println("特殊請求");
	}
}

適配器

package 適配器模式;

public class Adapter extends Target  {
	private Adaptee adp=new Adaptee();
	@Override
	public void Reuqest() 
	{
		adp.specifiRequest();
	}
 
}

客戶端

package 適配器模式;

public class Client {
	public static void main(String[] args) {
		Target target=new Adapter();
		target.Reuqest();
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章