設計模式的學習(7)適配器模式

適配器模式

適配器模式(Adapter Pattern)將一個接口轉換成客戶但願的另外一個接口,使接口不兼容的那些類能夠一塊兒工做,其別名爲包裝器(Wrapper)。java

適配器模式既能夠做爲類結構型模式,也能夠做爲對象結構型模式。經常使用做在不修改源代碼的狀況下讓已經存在的類能和其餘類一塊兒使用。app

根據適配器類和適配者類的關係,適配器模式能夠分爲如下兩種:學習

  • 對象適配器模式(組合的方式)this

  • 類適配器模式(繼承的方式)

爲何

試想一下,若是咱們不使用適配器模式,咱們能夠選擇修改源碼或者更改咱們的目標接口。而修改源碼或是更改接口很大的代價很大,甚至是咱們根本就沒有源碼。就好像咱們沒法更換插座接口或是充電器的接頭同樣。spa

怎麼作

因爲適配器模式有多種,下面經過幾個代碼片斷來分別學習一下:code

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

定義目標接口

/**
 * 目標接口
 * 
 */
public interface Target {
	void request();
}

定義適配者類

/**
 * 適配者類
 * 
 */
public class Adaptee {
	/**
	 * 客戶指望使用的業務方法
	 */
	public void specificRequest() {
		System.out.println("Adaptee Specific request!");
	}

}

定義對象適配器類

/**
 * 適配器類(對象適配器模式實現)
 */
public class Adapter implements Target {

	// 以組合的方式關聯適配者
	private Adaptee adaptee;

	public Adapter(Adaptee adaptee) {
		this.adaptee = adaptee;
	}

	public void setAdaptee(Adaptee adaptee) {
		this.adaptee = adaptee;
	}

	/**
	 * 對接口進行轉換
	 */
	public void request() {
		adaptee.specificRequest();
	}
}

定義類適配器類

/**
 * 類適配器模式
 * 
 */
public class AdapterClass extends Adaptee implements Target {

	public void request() {
		specificRequest();
	}

}

建立請求

public class Main {
	public static void main(String[] args) {
		// 對象是配器模式
		Adaptee adaptee = new Adaptee();
		Target target = new Adapter(adaptee);
		target.request();
		// 類適配器模式
		Target target1 = new AdapterClass();
		target1.request();
	}
}
相關文章
相關標籤/搜索