1. 程式人生 > >適配器模式(Adapter模式)

適配器模式(Adapter模式)

interface inpu handler public 不能 完成 reader out client

什麽是適配器模式?

  將一個類的接口轉換成客戶希望的另外一個接口。Adapter模式使得原本由於接口不兼容而不能一起工作的那些類可以在一起工作。

適配器模式中的角色

  目標接口(Traget):客戶所期待的接口。目標可以是具體的或抽象的類,也可以是接口。

  需要適配的類(Adaptee):需要適配的類或者適配者類。

  適配器:通過包裝一個需要適配的對象,把原接口轉換成目標接口。

首先創建Adaptee類,即需要被適配的對象:

  

package com.note.adapter;

/***
 * 被適配的類
 * (例子中的ps/2鍵盤)
 */
public class Adaptee {
	
	public void request() {
		System.out.println("可以完成客戶請求的需要的功能!");
	}

}

  

創建Target接口,就是給客戶端調用的接口:

package com.note.adapter;

public interface Target {
	
	void handleReq();
	
}

創建適配器類,負責將Adaptee適配到Target,起到了轉換器的作用:

package com.note.adapter;

/**
 * adpater適配器
 * (相當於usb和ps/2的轉換器)
 */
public class Adapter extends Adaptee implements Target {

	@Override
	public void handleReq() {
		super.request();
	}

}

客戶端測試

package com.note.adapter;

/**
 *  客戶端類 
 * (相當於例子中的筆記本,只有USB接口)
 */
public class Client {
	
	public void test(Target t) {
		t.handleReq();
	}

	public static void main(String[] args) {
		Client c = new Client();
		c.test(new Adapter());
	}

}

但是上面這個版本的Adapter采用的是繼承Adaptee的方式註入Adaptee,java中采用的是單繼承,如果此時Adapter還需要繼承其他類則沒有辦法了,不夠靈活。

下面采用的是對象組合的方式,將Adaptee註入到Adapter中,更為靈活,建議用下面的方法創建Adapter:

package com.note.adapter;

/**
 * adpater適配器
 * (相當於usb和ps/2的轉換器)
 */
public class Adapter2 implements Target {
	
	private Adaptee mAdaptee;
	
	public Adapter2(Adaptee adaptee) {
		mAdaptee = adaptee;
	}

	@Override
	public void handleReq() {
		mAdaptee.request();
	}

}

適配器模式的使用場景:

  用來做舊系統的改造和升級;
  轉換流就是使用的適配器模式,
  java.io.InputStreamReader
  java.io.OutputStream

  

  

適配器模式(Adapter模式)