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

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17


2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35
