適配器Adapter

          1.意圖:
          ????????????將一個(gè)類(lèi)的接口轉(zhuǎn)換成客戶希望的另一個(gè)接口。Adapter模式使得原來(lái)由于版本不兼容而不能在一起的夠哦那個(gè)做的那些類(lèi)可以在一起工作。有時(shí),為復(fù)用而設(shè)計(jì)的工具箱類(lèi)不能夠被復(fù)用的原因僅僅是因?yàn)樗慕涌谂c專(zhuān)業(yè)應(yīng)用領(lǐng)域所需要的接口不匹配。
          2.適配器模式有類(lèi)的適配器模式和對(duì)象的適配器模式兩種不同的形式。

          一、類(lèi)的適配器模式
          ??? 類(lèi)的適配器模式把適配的類(lèi)的API轉(zhuǎn)換成目標(biāo)類(lèi)的API。

          • 目標(biāo)(Target)角色:這就是所期待得到的接口。
          • 源(Adaptee)角色:現(xiàn)有需要適配的接口。
          • 適配器(Adapter)角色:適配器類(lèi)是本模式的核心。適配器把源接口轉(zhuǎn)換成目標(biāo)接口。顯然這一角色不可以是接口,而必須是具體類(lèi)。

          /**
          ?* 定義Client使用的與特定領(lǐng)域相關(guān)的接口
          ?*/
          public interface Target {
          ??? void sampleOperation1();
          ??? void sampleOperation2();
          }
          /**
          ?* 定義一個(gè)已經(jīng)存在的接口,這個(gè)接口需要適配
          ?*/
          public class Adaptee {
          ??? public void sampleOperation1() {
          ??? ??? // ......
          ??? }
          }
          /**
          ?* 對(duì)Adaptee與Target接口進(jìn)行適配
          ?*/
          public class Adapter extends Adaptee implements Target {
          ??? public void sampleOperation2() {
          ??? ??? // ......
          ??? }
          }

          二、對(duì)象適配器
          ??? 與類(lèi)的適配器模式一樣,對(duì)象適配器模式把適配的類(lèi)的API轉(zhuǎn)換成為目標(biāo)類(lèi)的API,與類(lèi)的適配器模式不同的是,對(duì)象的適配器模式不是使用繼承關(guān)系連接到Adaptee類(lèi),而是使用委派關(guān)系連接到Adaptee類(lèi)。示意代碼如下:
          /**
          ?* 定義Client使用的與特定領(lǐng)域相關(guān)的接口
          ?*/
          public interface Target {
          ??? void sampleOperation1();
          ??? void sampleOperation2();
          }
          /**
          ?* 定義一個(gè)已經(jīng)存在的接口,這個(gè)接口需要適配
          ?*/
          public class Adaptee {
          ??? public void sampleOperation1() {
          ??? ??? // ......
          ??? }
          }
          /**
          ?* 對(duì)Adaptee與Target接口進(jìn)行適配
          ?*/
          public class Adapter implements Target {
          ??? private Adaptee adaptee;
          ??? public Adapter(Adaptee adaptee) {
          ??? ??? super();
          ??? ??? this.adaptee = adaptee;
          ??? }
          ??? public void sampleOperation1() {
          ??? ??? adaptee.sampleOperation1(); // 看點(diǎn)
          ??? }
          ??? public void sampleOperation2() {
          ??? ??? // ......
          ??? }
          }

          類(lèi)適配器模式和對(duì)象適配器模式的異同:Target接口和Adaptee類(lèi)都相同,不同的是類(lèi)適配器的Adapter繼承Adaptee實(shí)現(xiàn)Target,對(duì)象適配器的Adapter實(shí)現(xiàn)Target聚集Adaptee。

          適配器模式的用意是將接口不同而功能相同或者相近的兩個(gè)接口加以轉(zhuǎn)換。

          posted on 2010-01-17 17:54 飛熊 閱讀(278) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): java設(shè)計(jì)模式

          <2010年1月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(1)

          隨筆分類(lèi)

          隨筆檔案

          文章分類(lèi)

          文章檔案

          收藏夾

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 金昌市| 洱源县| 霍林郭勒市| 沅江市| 虎林市| 淮滨县| 伊宁市| 浦江县| 永川市| 九龙县| 桑植县| 紫金县| 河北省| 金塔县| 蚌埠市| 葫芦岛市| 汤阴县| 鄄城县| 莆田市| 景宁| 修水县| 唐山市| 遂宁市| 伊川县| 枣强县| 洛阳市| 青海省| 饶平县| 黔东| 龙里县| 延庆县| 马鞍山市| 天水市| 尉氏县| 崇阳县| 中江县| 壤塘县| 奉节县| 钟山县| 隆德县| 柳河县|