Terry.Li-彬

          虛其心,可解天下之問(wèn);專其心,可治天下之學(xué);靜其心,可悟天下之理;恒其心,可成天下之業(yè)。

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            143 隨筆 :: 344 文章 :: 130 評(píng)論 :: 0 Trackbacks

          為一個(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é)果了.

           

           
           1package com.lucky.util;
           2
           3import java.util.Collection;
           4
           5public interface IAdapterMode {
           6    
           7    public void print();
           8
           9    public boolean insert(Object instance);
          10    
          11    public boolean delete(Object instance);
          12    
          13    public boolean update(Object instance);
          14    
          15    public Collection find(String sql);
          16}

          17
           1package com.lucky.util;
           2
           3import java.lang.reflect.Method;
           4import java.lang.reflect.Proxy;
           5import java.util.Collection;
           6
           7public abstract class AdapterModeAbstract implements IAdapterMode {
           8    
           9    public void print() {
          10        // TODO Auto-generated method stub
          11        System.out.println("調(diào)用了print");
          12    }

          13
          14    public boolean delete(Object instance) {
          15        // TODO Auto-generated method stub
          16        return false;
          17    }

          18
          19    public Collection find(String sql) {
          20        // TODO Auto-generated method stub
          21        return null;
          22    }

          23
          24    public boolean insert(Object instance) {
          25        // TODO Auto-generated method stub
          26        return false;
          27    }

          28
          29    public boolean update(Object instance) {
          30        // TODO Auto-generated method stub
          31        return false;
          32    }

          33    
          34}

          35
          posted on 2007-09-23 11:35 禮物 閱讀(183) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。

          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 土默特右旗| 晴隆县| 敖汉旗| 阿合奇县| 香河县| 华亭县| 囊谦县| 洛阳市| 冀州市| 柳河县| 通山县| 皋兰县| 巴楚县| 花垣县| 大关县| 兴义市| 正宁县| 马公市| 禄劝| 娱乐| 乌苏市| 论坛| 黄龙县| 工布江达县| 谢通门县| 弥勒县| 普宁市| 太和县| 通化县| 长寿区| 石门县| 买车| 武汉市| 苏州市| 萨嘎县| 荣昌县| 巴楚县| 邳州市| 诸城市| 遵化市| 石屏县|