国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

爪哇語(yǔ)言結(jié)構(gòu)性模式之變壓器模式介紹(上)

2019-11-18 12:16:36
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  什么是結(jié)構(gòu)性模式
  結(jié)構(gòu)性模式描述類和對(duì)象怎樣結(jié)合在一起成為較大的結(jié)構(gòu)。 結(jié)構(gòu)性模式描述兩種不同的東西:類與類的實(shí)例。根據(jù)它們所描述的東西的不同, 結(jié)構(gòu)性模式可以分為類結(jié)構(gòu)模式和實(shí)例結(jié)構(gòu)模式兩種。
  類結(jié)構(gòu)模式使用繼續(xù)(inheritance)來(lái)把類,接口等組合在一起,形成更大的結(jié)構(gòu)。 當(dāng)一個(gè)類從父類繼續(xù),并實(shí)現(xiàn)某接口時(shí),這個(gè)新的類就把父類的結(jié)構(gòu)和接口的結(jié)構(gòu)結(jié)合起來(lái)。 類結(jié)構(gòu)模式是靜態(tài)的。一個(gè)類結(jié)構(gòu)模式的典型的例子,就是類形式的變壓器模式。
  實(shí)例結(jié)構(gòu)模式描述各種不同類型的把對(duì)象組合在一起,實(shí)現(xiàn)新的功能的方法。實(shí)例結(jié)構(gòu)模式是動(dòng)態(tài)的。 一個(gè)典型的實(shí)例結(jié)構(gòu)模式,就是代理人模式,代理人模式將在以后介紹。其它的例子包括后面將要介紹的復(fù)合模式, 飛行重量模式,裝飾模式,以及實(shí)例形式的變壓器模式等。
  有一些模式會(huì)有類結(jié)構(gòu)模式的形式和實(shí)例結(jié)構(gòu)模式的形式兩種,成為以上兩種形式的結(jié)構(gòu)模式的極好注解。 本節(jié)要介紹的變壓器模式就是這樣,它有類形式和實(shí)例形式兩種。
  變壓器模式的介紹
  變壓器模式把一個(gè)類的接口變換成客戶端所期待的另一種接口。變壓器模式使原本無(wú)法在一起工作的兩個(gè)類能夠在一起工作。 如前所述,變壓器模式是關(guān)于類結(jié)構(gòu)的結(jié)構(gòu)性模式,因而是靜態(tài)的模式。
  這很象變壓器(Adapter)---變壓器把一種電壓變換成另一種電壓。當(dāng)我把美國(guó)的電器拿回中國(guó)大陸去用的時(shí)候, 我就面臨電壓不同的問(wèn)題。美國(guó)的生活用電壓是110伏,而中國(guó)的電壓是220伏。我假如要在中國(guó)大陸使用我在美國(guó)使用的電器, 我就必須有一個(gè)能把220伏電壓轉(zhuǎn)換成110伏電壓的變壓器。而這正象是本模式所做的事,因此此模式被稱為變壓器模式。
  讀者可能也會(huì)想到,Adapter在中文也可翻譯為轉(zhuǎn)換器(適配器)。實(shí)際上,轉(zhuǎn)換器(適配器)也是一個(gè)合適的名字。仍用電器作例子, 美國(guó)的電器的插頭一般是三相的,即除了陽(yáng)極,陰極外,還有一個(gè)地極。中國(guó)大陸的建筑物內(nèi)的電源插座一般只有兩極,沒(méi)有地極。 這時(shí)候,即便電器的確可以接受220伏電壓,電源插座和插頭不匹配,也使電器無(wú)法使用。 一個(gè)三相到兩相的轉(zhuǎn)換器(適配器)就能解決這個(gè)問(wèn)題。因此此模式也可被稱為轉(zhuǎn)換器(適配器)模式。
  同時(shí),這種做法也很象包裝過(guò)程,被包裝的物體的真實(shí)樣子被包裝所掩蓋和改變,因此有人把這種模式叫做包裝(Wrapper)模式。事實(shí)上, 我們經(jīng)常寫很多這樣的wrapper類,把已有的一些類包裹起來(lái),使之能有滿足需要的接口。
  變壓器模式有類形式和實(shí)例形式兩種不同的形式。
  類形式的變壓器模式的類圖定義如下。
   爪哇語(yǔ)言結(jié)構(gòu)性模式之變壓器模式介紹(上)(圖一)
  圖1. 類形式的類變壓器模式的類圖定義
  在圖1可以看出,模式所涉及的成員有:
  目標(biāo)(Target)。這就是我們所期待得到的接口。注重,由于這里討論的是類變壓器模式,因此目標(biāo)不可以是類。
  源(Adaptee)。現(xiàn)有需要適配的接口。
  變壓器(Adapter)。變壓器類是本模式的核心。變壓器把源接口轉(zhuǎn)換成目標(biāo)接口。顯然,這一角色不可以是接口, 而必須是實(shí)類。
  本模式的示范代碼如下:
  package com.javapatterns.adapter.classAdapter;
  public interface Target
  {
  /**
   * Class Adaptee contains Operation sampleOperation1.
   */
  void sampleOperation1();
  /**
   * Class Adaptee doesn't contain operation sampleOperation2.
   */
  void sampleOperation2();
  }
  代碼清單1. Target的源代碼。
  package com.javapatterns.adapter.classAdapter;
  public class Adaptee
  {
   public void
  sampleOperation1(){}
  }
  代碼清單2. Adaptee的源代碼。
  package com.javapatterns.adapter.classAdapter;
  public class Adapter extends Adaptee implements Target
  {
  /**
   * Class Adaptee doesn't contain operation sampleOperation2.
   */
  public void sampleOperation2()
  {
  // Write your code here
  }
  }
  代碼清單3. Adapter的源代碼。
  類形式的變壓器模式的效果
  第一、 使用一個(gè)實(shí)類把源(Adaptee)適配到目標(biāo)(Target)。這樣一來(lái),假如你想把源以及源的子類都使用此類適配, 就行不通了。
  第二、 由于變壓器類是源的子類,因此可以在變壓器類中置換(override)掉源的一些方法。
  第三、 由于只引進(jìn)了一個(gè)變壓器類,因此只有一個(gè)路線到達(dá)目標(biāo)類。問(wèn)題得到簡(jiǎn)化。
  實(shí)例形式的變壓器模式的類圖定義如下。
  爪哇語(yǔ)言結(jié)構(gòu)性模式之變壓器模式介紹(上)(圖二)
  在圖1可以看出,模式所涉及的成員有:
  目標(biāo)(Target)。這就是我們所期待得到的接口。目標(biāo)可以是實(shí)的或抽象的類。
  源(Adaptee)。現(xiàn)有需要適配的接口。
  變壓器(Adapter)。變壓器類是本模式的核心。變壓器把源接口轉(zhuǎn)換成目標(biāo)接口。 顯然,這一角色必須是實(shí)類。
  本模式的示范代碼如下:
  package com.javapatterns.adapter;
  public interface Target {
  /**
   * Class Adaptee contains operation sampleOperation1.
   */
  void sampleOperation1();
  /**
   * Class Adaptee doesn't contain operation sampleOperation2.
   */
  void sampleOperation2();
  }
  代碼清單4. Target的源代碼。
  package com.javapatterns.adapter;
  public class Adapter implements Target {
  public Adapter(Adaptee adaptee){
  super();
  this.adaptee = adaptee;
  }
  public void sampleOperation1(){  adaptee.sampleOperation1();
  }
  public void sampleOperation2(){
  // Write your code here
  }
  PRivate Adaptee adaptee;
  }
  代碼清單5. Adapter的源代碼。
  package com.javapatterns.adapter;
  public class Adaptee {
  public void sampleOperation1(){}
  }
  代碼清單6. Adaptee的源代碼。
  實(shí)例形式的變壓器模式的效果
  第一、 一個(gè)變壓器可以把多種不同的源適配到同一個(gè)目標(biāo)。換言之,同一個(gè)變壓器可以把源類和它的子類都適配到目標(biāo)接口。
  第二、 與類形式的變壓器模式相比,要想置換源類的方法就不輕易。假如一定要置換掉源類的一個(gè)或多個(gè)方法,就只好先做一個(gè)源類的子類, 將源類的方法置換掉,然后再把源類的子類當(dāng)作真正的源進(jìn)行適配。
  第三、 雖然要想置換源類的方法不輕易,但是要想增加一些新的方法則方便得很。 而且新增加的方法同時(shí)適用于所有的源。
  在什么情況下使用變壓器模式
  在以下各種情況下使用變壓器模式:
  第一、 你需要使用現(xiàn)有的類,而此類的接口不符合你的需要。
  第二、 你想要建立一個(gè)可以重復(fù)使用的類,用以與一些彼此之間沒(méi)有太大關(guān)聯(lián)的一些類, 包括一些可能在將來(lái)引進(jìn)的類一起工作。這些源類不一定有很復(fù)雜的接口。
  第三、 (對(duì)實(shí)例形式的變壓器模式而言)你需要改變多個(gè)已有的子類的接口, 假如使用類形式的變壓器模式,就要針對(duì)每一個(gè)子類做一個(gè)變壓器類,而這不太實(shí)際。
  J2SE中的變壓器模式的使用
  在爪哇語(yǔ)言2.0的標(biāo)準(zhǔn)SDK中,有很多的變壓器類。如:
  庫(kù)程序包java/awt/event中有
  ComponentAdapter
  ContainerAdapter
  FocusAdapter
  HierarchyBoundsAdapter
  KeyAdapter
  MouseAdapter
  MouseMotionAdapter
  WindowAdapter
  庫(kù)程序包Javax/swing/event中有
  InternalFrameAdapter
  MouseInputAdapter
  這些都是變壓器模式使用的實(shí)際例子。值得指出的是,WindowAdapter的建立者們不可能預(yù)見到你所要使用的目標(biāo)接口, 因此WindowAdapter不可能實(shí)現(xiàn)你的目標(biāo)接口。但是,在考察了這些變壓器類的使用范圍之后,我們會(huì)發(fā)現(xiàn), WindowAdapter只需實(shí)現(xiàn)WindowListener的接口即可,也就是說(shuō),目標(biāo)接口被省略了。請(qǐng)見下面的解釋。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 库车县| 中宁县| 遂宁市| 盐津县| 尼木县| 肥城市| 宜阳县| 榆中县| 沙洋县| 华池县| 苏尼特左旗| 绥棱县| 平乐县| 都昌县| 邵东县| 岳普湖县| 光山县| 石台县| 大兴区| 普兰县| 安庆市| 扎赉特旗| 商洛市| 当涂县| 台州市| 孝感市| 巴南区| 文水县| 舟曲县| 哈巴河县| 乌鲁木齐市| 嵊州市| 河北省| 昆明市| 长沙县| 多伦县| 射洪县| 黔江区| 增城市| 清远市| 新河县|