某個類擁有我們所需要的功能,但他的方法名卻不能滿足使用者的期望,這時候需要使用擴充卡模式修改這個現存類和外界互動的接口,進而使其能滿足使用者的需求。擴充卡模式的宗旨是:保留現有類提供的服務,修改其接口使其能滿足使用者的需要。
擴充卡模式分為:類擴充卡模式和對象擴充卡模式。
一、類擴充卡模式:
當 前客戶調用接口中requiredMethod()方法;而現存的一個類中含有一個名為usefulMethod(),它提供的功能正好可以滿足客戶的需 求。但是由于現存的類和這個接口沒有關聯,是以客戶無法直接使用usefulMethod()方法。(書上說:由于兩個方法的名稱不同,是以無法工作。但 我覺得這個理由不恰當,如果真是由于方法名稱不同,那直接在用戶端中使用現存的這個類不就完了。呵呵,可能了解有誤。)下面是完整可運作代碼
package pattern.adapter;
/**
* 用戶端需要的接口
* 裡面有用戶端需要的行為
* @author chenjie
*
*/
public interface NeededInterface {
public void requiredMethod();
}
package pattern.adapter;
/**
* 這是已經存在的一個類
* 裡面有滿足用戶端需要的方法
* @author chenjie
*
*/
public class ExistClass {
public void usefulMethod(){
System.out.println("I can offer the service, but my name doesn't match your need.How???");
}
}
package pattern.adapter;
/**
* 這是一個擴充卡類
* 該類實作了用戶端需要的接口,同時該類并沒有自己去實作用戶端需要的功能
* 而是從另一個已經含有該功能的類中繼承了該功能
* 這樣的一種模式:就是擴充卡模式。
* @author chenjie
*
*/
public class Adapter extends ExistClass implements NeededInterface {
@Override
public void requiredMethod() {
this.usefulMethod(); //在這裡直接調用了這個已經含有需要功能的方法
}
}
package pattern.adapter;
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
NeededInterface adapter = new Adapter();
adapter.requiredMethod();
}
}