設計模式——適配器模式

適配器模式:Adapter
 
改造現有的接口從而適應新接口的要求。
 
適配器中須要有要適配的對象的引用。
 
適配器中包裝多個被適配者是外觀模式。
 
適配器模式的意圖是改變接口符合客戶的指望,外觀模式的意圖是提供子系統的一個簡化接口。
 
這裏容易聯想到外觀模式。外觀模式提供了一個統一的接口,用來訪問子系統中的一羣接口。
 
比較如下三者的區別
裝飾器 不改變接口可是加入責任;
適配器 將一個接口轉化成另外一個接口;
外觀 讓接口更簡單
 
適配器模式類圖:
 
 
如下程序模擬鴨子和火雞的叫和飛的動做。假設你缺乏鴨子對象,則將一個火雞適配成一個鴨子,用火雞冒充鴨子來使用。
 
1.定義鴨子接口
package net.dp.adapter.ducks;

public interface Duck {
	public void quack();

	public void fly();
}

  

2.定義火雞接口java

package net.dp.adapter.ducks;

public interface Turkey {
	public void gobble();

	public void fly();
}

  

3.定義出火雞的實現類測試

package net.dp.adapter.ducks;

public class WildTurkey implements Turkey {
	public void gobble() {
		System.out.println("Gobble gobble");
	}

	public void fly() {
		System.out.println("I'm flying a short distance");
	}
}

  

4.實現火雞的適配器this

package net.dp.adapter.ducks;

public class TurkeyAdapter implements Duck {
	Turkey turkey;

	public TurkeyAdapter(Turkey turkey) {
		this.turkey = turkey;
	}

	public void quack() {
		turkey.gobble();
	}

	public void fly() {
		for (int i = 0; i < 5; i++) {
			turkey.fly();
		}
	}
}

這樣TurkeyAdapter就能夠做爲一隻鴨子使用啦!!對象

5.測試類blog

package net.dp.adapter.ducks;

public class DuckTestDrive {
	public static void main(String[] args) {

		WildTurkey turkey = new WildTurkey();
		Duck turkeyAdapter = new TurkeyAdapter(turkey);

		testDuck(turkeyAdapter);
	}

	static void testDuck(Duck duck) {
		duck.quack();
		duck.fly();
	}
}
相關文章
相關標籤/搜索