細心!用心!耐心!

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

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

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

          代碼的實現是這樣的: 
          public class Adapter extends Adaptee implements Target {
              // ....
          }

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

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

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

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

          來看看另一個情況。

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

          public interface IOther {
              public void doOther();
          }

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

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

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

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

          雖不滿意,但至少解決了目前的問題,當然這邊只是其中一例,畢竟C++是C++,Java是Java,兩者語法並不是一對一的關係,視實際需求還可以變化一下。
          posted on 2007-04-17 10:41 張金鵬 閱讀(336) 評論(0)  編輯  收藏 所屬分類: Structural 模式
          主站蜘蛛池模板: 冕宁县| 清远市| 安义县| 湘乡市| 石门县| 南川市| 和静县| 威宁| 阳江市| 广宁县| 太原市| 吴桥县| 图片| 鹤峰县| 桦甸市| 多伦县| 崇左市| 沽源县| 通渭县| 长治县| 澄迈县| 南木林县| 岳西县| 灌阳县| 和田市| 突泉县| 盱眙县| 广宁县| 晴隆县| 军事| 新河县| 左权县| 河间市| 阜城县| 阿瓦提县| 彭阳县| 宝兴县| 尉氏县| 明溪县| 新宾| 石门县|