天天看點

設計模式執行個體系列文章之擴充卡模式

某個類擁有我們所需要的功能,但他的方法名卻不能滿足使用者的期望,這時候需要使用擴充卡模式修改這個現存類和外界互動的接口,進而使其能滿足使用者的需求。擴充卡模式的宗旨是:保留現有類提供的服務,修改其接口使其能滿足使用者的需要。

擴充卡模式分為:類擴充卡模式和對象擴充卡模式。

一、類擴充卡模式:

當 前客戶調用接口中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();

}

}