<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    憨厚生

    ----Java's Slave----
    ***Java's Host***

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      165 隨筆 :: 17 文章 :: 90 評論 :: 0 Trackbacks
    這是昨天我跟天意在一次閑聊中一次有起的討論,標簽接口真有那么重要嗎?比如說很多初學者認為java.io.Serializable這樣的接口,很多時候可用可不用,不用一樣能執行對象系列化功能。
      為此,我們通過一個通俗而有趣的示例!這個示例是設計一個獵人,其持有一把智能獵槍,這就是說這把獵槍會自動識別人類,若發現瞄準的目標是人類,就不會開火,而其它的任何事物都通殺。
      為此,我們使用了下面三個接口:
      一個用來表示萬事萬物的SomeThing
        
      public?interface?SomeThing?{}  

      人類的接口:
      public?interface?Humans?extends?SomeThing?{}

      動物的接口:
    public?interface?Animals?extends?SomeThing?{}

    然后是一系列的實現:?
    ???中國人:??????
    public?class?Chinese?implements?Humans?{}

    ???日本人:
    public?class?Japanese?{}

    ???狗:
    public?class?Dog?implements?Animals?{}

    妖怪(他很聰明,給自己帖上了人的標簽):
    public?class?Monster?implements?Humans?{}

    下面這個程序的核心部分,獵人類及客戶端程序:
    public?class?Hunter?{
    public?void?fire(Object?target)
    {
    ?if(target?instanceof?Humans)
    ?{
    ??System.out.println("這下完了,打中了一個人,該去坐牢了!");
    ?}
    ?else?
    ?{
    ??System.out.println("恭喜你,打中了一只動物!");
    ?}
    }
    //智能的槍
    public?void?intelligentFire(Object?target)
    {
    ?if(target?instanceof?Humans)
    ?{
    ??return;
    ?}
    ?System.out.println("開了一槍!"+target.getClass());
    ?//下面進行秒殺等相關處理
    ?//銷毀他
    ?target=null;
    }
    public?static?void?main(String[]?args)?{
    Hunter?hunter=new?Hunter();
    Object[]?objects=new?Object[]{new?Dog(),new?Japanese(),new?Japanese(),new?Chinese(),new?Monster(),new?SomeThing(){}};
    for(int?i=0;i<objects.length;i++)
    ?hunter.intelligentFire(objects[i]);
    }
    }

    ?運行程序,你會發現輸出類似下面結果:

    開了一槍!class?springroad.demo.taginterface.Dog
    開了一槍!class?springroad.demo.taginterface.Japanese
    開了一槍!class?springroad.demo.taginterface.Japanese
    開了一槍!class?springroad.demo.taginterface.Hunter$1

       由此可見,智能獵槍瞄準6個目標,開了4槍。只對Chinese、及Monster的實例沒有開槍。因為這里討論的是標簽接口,雖然Humans沒有任 何方法,但從智能獵槍的角度來看,他就是通過這個標簽來判斷是否可以開火的。他不用管也管不了目標的層次等級關系(比如Japanese肯定很非常鮮明等 級結構),即繼承關系。他也管不了目標的來自于哪兒。比如,是用new操作符創建,還是從容器中取,或者是從網絡某個地方加載一個。
      Hunter只是制訂了一個簡單的規則,你要想不讓我的槍對你開火,你就必須在自己身上帖上一個Humans的標簽。也就是說你必須遵守這個規則。
      現在回過頭來看,因為妖怪Monster真身應該是一條蛇或其它什么動物,但是他懂得Hunter制訂的規則,于在巧妙的給自己帖上了一個Humans的標簽,以致于欺騙了我們的智能獵槍。
      而Japanese則自認為自己了不起,不按規則辦事,我就不理你Hunter制訂的規則,什么Humans標簽,我就是不用。于是放到我們的程序中當然就只有挨殺的份了。

      由此可見,空接口(標簽接口)的重要性,在像本例中,給不給自己帖不標簽,這是一個性命莜關的問題。其實在OO的世界中,空接口可以算是最高的層像。
    posted on 2007-01-22 09:10 二胡 閱讀(97) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 久久精品夜色国产亚洲av| 亚洲日本中文字幕一区二区三区| 亚洲av无码精品网站| 一出一进一爽一粗一大视频免费的 | xxxx日本免费| 4444亚洲国产成人精品| 伊人久久免费视频| 亚洲精品无码久久久久久久| 18禁黄网站禁片免费观看不卡| 亚洲高清无在码在线电影不卡| 妻子5免费完整高清电视| 亚洲一区欧洲一区| 午夜私人影院免费体验区| 亚洲成a人无码亚洲成www牛牛| 免费一级毛片不卡不收费| 亚美影视免费在线观看| 亚洲av综合avav中文| 国产成人精品免费视频动漫 | 国产精品亚洲а∨无码播放麻豆| 国产在线观看www鲁啊鲁免费| 一区二区视频在线免费观看| 亚洲av无码不卡| 成人免费无码视频在线网站| 美女被暴羞羞免费视频| 亚洲精品乱码久久久久久久久久久久 | 久久久无码精品亚洲日韩软件 | 玖玖在线免费视频| 久久精品九九亚洲精品| 毛片免费在线观看网站| 九九视频高清视频免费观看| 久久国产精品亚洲综合| 91香蕉视频免费| av午夜福利一片免费看久久| 久久精品亚洲精品国产色婷| 日韩精品免费电影| 中国人免费观看高清在线观看二区| 久久久久亚洲av无码专区导航| 日韩免费观看视频| a级片免费在线观看| 中国china体内裑精亚洲日本| 久久夜色精品国产亚洲av|