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