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

首頁 > 學院 > 開發設計 > 正文

爪哇語言結構性模式之變壓器模式介紹

2019-11-18 15:47:21
字體:
來源:轉載
供稿:網友
什么是結構性模式

  結構性模式描述類和對象怎樣結合在一起成為較大的結構。 結構性模式描述兩種不同的東西:類與類的實例。根據它們所描述的東西的不同, 結構性模式可以分為類結構模式實例結構模式兩種。

  類結構模式使用繼續(inheritance)來把類,接口等組合在一起,形成更大的結構。 當一個類從父類繼續,并實現某接口時,這個新的類就把父類的結構和接口的結構結合起來。 類結構模式是靜態的。一個類結構模式的典型的例子,就是類形式的變壓器模式。

  實例結構模式描述各種不同類型的把對象組合在一起,實現新的功能的方法。實例結構模式是動態的。 一個典型的實例結構模式,就是代理人模式,代理人模式將在以后介紹。其它的例子包括后面將要介紹的復合模式, 飛行重量模式,裝飾模式,以及實例形式的變壓器模式等。

  有一些模式會有類結構模式的形式和實例結構模式的形式兩種,成為以上兩種形式的結構模式的極好注解。 本節要介紹的變壓器模式就是這樣,它有類形式和實例形式兩種。

  變壓器模式的介紹

  變壓器模式把一個類的接口變換成客戶端所期待的另一種接口。變壓器模式使原本無法在一起工作的兩個類能夠在一起工作。 如前所述,變壓器模式是關于類結構的結構性模式,因而是靜態的模式。

  這很象變壓器(Adapter)---變壓器把一種電壓變換成另一種電壓。當我把美國的電器拿回中國大陸去用的時候, 我就面臨電壓不同的問題。美國的生活用電壓是110伏,而中國的電壓是220伏。我假如要在中國大陸使用我在美國使用的電器, 我就必須有一個能把220伏電壓轉換成110伏電壓的變壓器。而這正象是本模式所做的事,因此此模式被稱為變壓器模式。

  讀者可能也會想到,Adapter在中文也可翻譯為轉換器(適配器)。實際上,轉換器(適配器)也是一個合適的名字。仍用電器作例子, 美國的電器的插頭一般是三相的,即除了陽極,陰極外,還有一個地極。中國大陸的建筑物內的電源插座一般只有兩極,沒有地極。 這時候,即便電器的確可以接受220伏電壓,電源插座和插頭不匹配,也使電器無法使用。 一個三相到兩相的轉換器(適配器)就能解決這個問題。因此此模式也可被稱為轉換器(適配器)模式。

  同時,這種做法也很象包裝過程,被包裝的物體的真實樣子被包裝所掩蓋和改變,因此有人把這種模式叫做包裝(Wrapper)模式。事實上, 我們經常寫很多這樣的wrapper類,把已有的一些類包裹起來,使之能有滿足需要的接口。

  變壓器模式有類形式和實例形式兩種不同的形式。進入討論組討論。

  類形式的變壓器模式的定義

  類形式的變壓器模式的類圖定義如下。


  在圖1可以看出,模式所涉及的成員有:
  • 目標(Target)。這就是我們所期待得到的接口。注重,由于這里討論的是類變壓器模式,因此目標不可以是類。

  • 源(Adaptee)。現有需要適配的接口。

  • 變壓器(Adapter)。變壓器類是本模式的核心。變壓器把源接口轉換成目標接口。顯然,這一角色不可以是接口, 而必須是實類。

  本模式的示范代碼如下:

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    }}



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 桐城市| 伊宁市| 绥化市| 兰西县| 彩票| 文昌市| 阿坝县| 诏安县| 延寿县| 邵东县| 琼海市| 龙游县| 防城港市| 印江| 喀喇沁旗| 盐津县| 边坝县| 炎陵县| 延津县| 赤峰市| 万全县| 镇坪县| 灌阳县| 涞水县| 罗平县| 花垣县| 大田县| 柳州市| 焦作市| 余干县| 安西县| 莎车县| 连南| 红河县| 大连市| 怀远县| 内丘县| 颍上县| 德化县| 图们市| 屏东市|