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

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

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

    細(xì)心!用心!耐心!

    吾非文人,乃市井一俗人也,讀百卷書,跨江河千里,故申城一游; 一兩滴辛酸,三四年學(xué)業(yè),五六點(diǎn)粗墨,七八筆買賣,九十道人情。

    BlogJava 聯(lián)系 聚合 管理
      1 Posts :: 196 Stories :: 10 Comments :: 0 Trackbacks
    Adapter模式的另一種作法是Class Adapter模式,在這個(gè)模式下,Adapter直接繼承Adaptee(要引進(jìn)的新類別),以擁有當(dāng)中的成員及方法,在C++中的話可以這麼作:
    Adapter

    C++中可以多重繼承,但在Java中不行,所以在Java中若要採用Class Adapter,必須作點(diǎn)修改,一方面繼承Adaptee,一方面實(shí)作Target的介面:
    Adapter

    代碼的實(shí)現(xiàn)是這樣的: 
    public class Adapter extends Adaptee implements Target {
        // ....
    }

    當(dāng)然,這必須您原先的Target定義了共同的介面,所以Class Adapter在Java中適用的場合較少,事實(shí)上,也比較建議使用Object Adapter,這樣的Adapter模式比較有彈性,例如,您可以在Adapter上加上個(gè)setter,以隨時(shí)可以抽換Adaptee。

    在Java中,Class Adapter的一個(gè)應(yīng)用場合是達(dá)到多重繼承的效果,您一定在很多時(shí)候聽別人說,介面(interface)可以達(dá)到多重繼承的效果,這是怎麼回事?

    其實(shí)要討論這個(gè)問題,首先您對於C++中多重繼承要先有認(rèn)識(shí),新手看了書說介面可以達(dá)到多重繼承,切莫人云亦云,尤其是沒有學(xué)過C++的新手們,如果您對於C++多重繼承想要有所認(rèn)識(shí),請先看看 多重繼承(一)多重繼承(二)

    Java不能多重繼承,但為何說Java中可以使用介面(interface)來達(dá)到多重繼承的效果,首先效果之一,就如 多重繼承(二) 中描述的「多重繼承時(shí)通常其中一個(gè)基底類別作為private實(shí)作體,而其它的用以表現(xiàn)完全的抽象介面?!?,在Java中這個(gè)效果可以使用介面來達(dá)到,介面此時(shí)所扮演的即 多重繼承(二) 中的抽象類別,一個(gè)完全的抽象介面,這個(gè)效果的達(dá)成方式,如 介面(interface)型態(tài) 中所介紹的,您可以直接對應(yīng)這兩個(gè)主題中的程式實(shí)作來瞭解,瞭解Java中如何使用介面(interface)來達(dá)到C++中所謂多重繼承的「一種」效果。

    來看看另一個(gè)情況。

    如果有SomeClass類別與OtherClass類別,您想要SomeAndOther類別可以同時(shí)擁有SomeClass類別與 OtherClass類別中已定義好的操作,並可以進(jìn)行多型操作,在C++中可以用多重繼承來達(dá)到,但在Java中顯然的無法使用多重繼承,怎麼辦?您可以在設(shè)計(jì)上先繞個(gè)彎,先使用兩個(gè)介面分別定義好SomeClass與OtherClass兩個(gè)類別的公開方法,例如:
    public interface ISome {
        public void doSome();
    }

    public interface IOther {
        public void doOther();
    }

    接著讓SomeClass與OtherClass分別實(shí)作兩個(gè)介面:
    public class SomeClass implements ISome {
        public void doSome() {
            ....
        }
    }

    public class OtherClass implements IOther {
        public void doOther() {
            ....
        }
    }

    SomeAndOther如何同時(shí)擁有兩個(gè)SomeClass與OtherClass類別已定義好的操作?並可以多型操作?SomeAndOther可以繼承其中之一,並擁有其中之一,例如:
    public class SomeAndOther extends SomeClass implements IOther {
        private IOther other = new OtherClass();

        public void doOther() {
            other.doOther();
        }
    }

    雖不滿意,但至少解決了目前的問題,當(dāng)然這邊只是其中一例,畢竟C++是C++,Java是Java,兩者語法並不是一對一的關(guān)係,視實(shí)際需求還可以變化一下。
    posted on 2007-04-17 10:41 張金鵬 閱讀(341) 評(píng)論(0)  編輯  收藏 所屬分類: Structural 模式
    主站蜘蛛池模板: 7723日本高清完整版免费| 亚洲AV无码国产一区二区三区| 国产高清视频免费在线观看| 免费国产真实迷j在线观看| 亚洲日韩国产AV无码无码精品| 99re热免费精品视频观看| 亚洲人成777在线播放| 国产精品怡红院永久免费| 亚洲综合区图片小说区| 无码国产精品一区二区免费虚拟VR| 久久精品国产亚洲综合色| 鲁丝片一区二区三区免费| 亚洲伦另类中文字幕| 最近免费中文字幕大全高清大全1| 久久亚洲中文字幕精品有坂深雪| 5555在线播放免费播放| 亚洲综合网美国十次| 中字幕视频在线永久在线观看免费| 亚洲情A成黄在线观看动漫软件| 欧洲精品成人免费视频在线观看| 学生妹亚洲一区二区| 国产免费观看视频| jizz免费观看| 久久久久久亚洲Av无码精品专口| 在线观看H网址免费入口| 亚洲人成电影网站免费| 亚洲精品无码久久久| 无码国产精品一区二区免费vr| 亚洲人成在线中文字幕| 免费一级毛片清高播放| a级毛片在线视频免费观看| 亚洲综合小说久久另类区| 日本免费v片一二三区| 中文在线观看永久免费| 亚洲在成人网在线看| 国产公开免费人成视频| 黄色免费在线网站| 亚洲第一男人天堂| 亚洲国产精品日韩专区AV| 最好看最新的中文字幕免费| 亚洲国产高清国产拍精品|