為一個接口提供缺省實現,這樣子類可以從這個缺省實現進行擴展.而不必從原有接口進行擴展.作為適配器模式的一個特例,缺省適配模式在java語言中有著特殊的應用.(引用java模式書)
adapter是一個非常常用的設計模式.
像windows的每個窗口,事件很多個.關閉,移動,最大化,最小化,
java代碼設計如下:
interface 窗口{
public void 關閉();
public void 移動();
public ovid 最大化();
...
...
}
如果客戶點擊了關閉按鈕,java類實現如下:
Frame implements 窗口{
public void 關閉(){
System.out.println("關閉窗口");
}
public void 移動()[
}
public ovid 最大化(){
}
...
...
}
這里面我們可以看出,我們關注的只有關閉按鈕觸發的事件,其它的我們不用管.但是在java類中,我們必須把接口的所有方法都給實現.這樣我們連一些沒有用的方法也得給實現.那怕是空實現.
下面我們來建一個抽象類來實現這個接口.
public abstract Frame implements 窗口{
public void 關閉(){
}
public void 移動(){
}
public ovid 最大化(){
}
...
...
}
這里我們可以看出,抽象類給每個接口一個空的實現,那我們都可以在抽象類的基礎上進行擴展。關閉功能實現如下:
public CloseFrame extends Frame{
public void 關閉(){
System.out.println("關閉窗口");
}
}
像在java中的事件處理都是用適配器模式來實現的。接口,抽象類都是已經寫好的。我們只需要實現具體功能的類就可以了。
再舉個簡單的例子:
假如存在如下接口:
interface TestInterface{
void test1();
void test2();
void test3();
}
如果我們只關注test1接口應該怎樣寫呢。
abstract class TestAbstract implements Test{
public void test1(){
}
public void test2(){
}
public void test3(){
}
}
class TestTest1 extends TestAbstract{
public void test1(){
System.out.println("方法1實現");
}
}
那么在什么情況下用相信大家已經能看得出來了吧。假如你不準備實現接口的所有方法。就可以建一個抽象類來實現這個接口的所有方法,當然這里全都是空的實現.然后再寫一個類繼承這個抽象類就可以得到你想要的結果了.