qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          Java最優良的Adapter模式:適配器模式

            網上關于JAVA的適配器模式例子有很多,但真的有少實在不怎么樣,看也不懂。自己總結了一個在性能和結構上都很容易理解的Adapter模式。

            Adapter模式也叫適配器模式,是由GoF提出的23種設計模式的一種。Adapter模式是構造型模式之一,通過Adapter模式,可以改變已有類(或外部類)的接口形式。

            在大規模的系統開發過程中,我們常常碰到諸如以下這些情況:

            我們需要實現某些功能,這些功能已有還不太成熟的一個或多個外部組件,如果我們自己重新開發這些功能會花費大量時間;所以很多情況下會選擇先暫時使用外部組件,以后再考慮隨時替換。但這樣一來,會帶來一個問題,隨著對外部組件庫的替換,可能需要對引用該外部組件的源代碼進行大面積的修改,因此也極可能引入新的問題等等。如何最大限度的降低修改面呢?

            Adapter模式就是針對這種類似需求而提出來的。

            Adapter模式通過定義一個新的接口(對要實現的功能加以抽象),和一個實現該接口的Adapter(適配器)類來透明地調用外部組件。這樣替換外部組件時,最多只要修改幾個Adapter類就可以了,其他源代碼都不會受到影響。

            實現Adapter模式的2種方法與范例

            Adapter模式通過在Adapter類中調用外部組件來實現功能。

            根據調用方式的不同,Adapter模式有2種實現方法:

            1、通過繼承實現Adapter

            2、通過委讓實現Adapter

            為了能更清楚地說明2種實現方法的區別,我們舉例說明:

            比如,我們需要實現一個發送郵件的功能,需要用到一個名為OutMailer的外部組件,因為上述原因,我們決定用Adapter模式實現對OutMailer的透明調用。

            首先,我們把郵件發送的功能抽象成一個接口:

          1. IMailer.java  
          2. interface IMailer {  
          3.     //發送郵件 
          4.     publicvoid sendMail();  
          5. }

            然后定一個實現IMailer接口的MailerAdapter類。

            下面我們來看看MailerAdapter的實現方法。

            通過繼承實現Adapter

            MailerAdapter.java

          1. class MailerAdapter extends OutMailerimplements IMailer {  
          2.     //發送郵件 
          3.     publicvoid sendMail() {  
          4.         //調用OutMailer.sendMail()方法實現郵件發送 
          5.         this.sendMail();  
          6.     }  
          7.     //這里省略其他方法 
          8. }

            通過委讓實現Adapter

            MailerAdapter.java

          1. class MailerAdapter implements IMailer {  
          2.     private OutMailer outMailer =new OutMailer();  
          3.     //發送郵件 
          4.     publicvoid sendMail() {  
          5.         //調用OutMailer.sendMail()方法實現郵件發送 
          6.         outMailer.sendMail();  
          7.     }  
          8.     //這里省略其他方法 
          9. }

            不管是通過繼承實現Adapter,還是通過委讓實現Adapter,調用方MailerClient的調用方法完全一樣,如下:

            MailerClient.java

          1. IMailer mailer =new MailerAdapter();  
          2. ...  
          3. mailer.sendMail();

            我們可以看到,這里完全沒有直接調用OutMailer,也就是說OutMailer即使被替換了,我們也不用對MailerClient做任何修改。

          posted on 2012-08-07 09:40 順其自然EVO 閱讀(202) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2012年8月>
          2930311234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 万盛区| 金沙县| 恩施市| 句容市| 七台河市| 吴旗县| 江北区| 固安县| 南城县| 巴南区| 东乌| 文安县| 汾阳市| 潜山县| 莱州市| 电白县| 津市市| 噶尔县| 石屏县| 天峨县| 德昌县| 阳信县| 柳林县| 曲靖市| 湘潭县| 清徐县| 大姚县| 江西省| 东城区| 临高县| 观塘区| 固始县| 苗栗县| 义马市| 靖宇县| 合山市| 屯昌县| 嘉义市| 石嘴山市| 浑源县| 通辽市|