<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)  編輯  收藏

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


    網站導航:
     
    主站蜘蛛池模板: 91制片厂制作传媒免费版樱花| 亚洲人成亚洲人成在线观看| 国产一级淫片免费播放| 亚洲国产电影av在线网址| 亚洲AV无码专区在线播放中文 | 亚洲AV无码久久| 国产在线观a免费观看| 国产福利在线免费| 亚洲一区二区三区播放在线| 成年网在线观看免费观看网址| 亚洲成人免费在线| 在线观看亚洲一区二区| 免费大片黄在线观看| 1000部拍拍拍18勿入免费凤凰福利| 在线观看免费宅男视频| 亚洲成人高清在线| 成人a毛片视频免费看| 91免费国产在线观看| 一区二区视频在线免费观看| 五月天婷婷免费视频| 成人免费一级毛片在线播放视频| 亚洲中文字幕无码一区| 亚洲国产精品无码AAA片| 色窝窝亚洲av网| 国产成人精品曰本亚洲79ren| 亚洲人成网国产最新在线| 免费在线看污视频| 四虎精品亚洲一区二区三区| 亚洲欧洲日韩极速播放| 99re6在线视频精品免费| 亚洲A∨午夜成人片精品网站| 亚洲免费观看在线视频| 无码人妻久久一区二区三区免费| 国产精品亚洲二区在线观看| 亚洲国产精品嫩草影院 | 国产精品视频免费| 亚洲精品国产第一综合99久久| 希望影院高清免费观看视频 | 国产日产亚洲系列最新| 亚洲精品无码你懂的| 成人影片麻豆国产影片免费观看|