Java最優良的Adapter模式:適配器模式
網上關于JAVA的適配器模式例子有很多,但真的有少實在不怎么樣,看也不懂。自己總結了一個在性能和結構上都很容易理解的Adapter模式。
Adapter模式也叫適配器模式,是由GoF提出的23種設計模式的一種。Adapter模式是構造型模式之一,通過Adapter模式,可以改變已有類(或外部類)的接口形式。
在大規模的系統開發過程中,我們常常碰到諸如以下這些情況:
我們需要實現某些功能,這些功能已有還不太成熟的一個或多個外部組件,如果我們自己重新開發這些功能會花費大量時間;所以很多情況下會選擇先暫時使用外部組件,以后再考慮隨時替換。但這樣一來,會帶來一個問題,隨著對外部組件庫的替換,可能需要對引用該外部組件的源代碼進行大面積的修改,因此也極可能引入新的問題等等。如何最大限度的降低修改面呢?
Adapter模式就是針對這種類似需求而提出來的。
Adapter模式通過定義一個新的接口(對要實現的功能加以抽象),和一個實現該接口的Adapter(適配器)類來透明地調用外部組件。這樣替換外部組件時,最多只要修改幾個Adapter類就可以了,其他源代碼都不會受到影響。
實現Adapter模式的2種方法與范例
Adapter模式通過在Adapter類中調用外部組件來實現功能。
根據調用方式的不同,Adapter模式有2種實現方法:
- 通過繼承實現Adapter
- 通過委讓實現Adapter
為了能更清楚地說明2種實現方法的區別,我們舉例說明:
比如,我們需要實現一個發送郵件的功能,需要用到一個名為OutMailer的外部組件,因為上述原因,我們決定用Adapter模式實現對OutMailer的透明調用。
首先,我們把郵件發送的功能抽象成一個接口:
- IMailer.java
- interface IMailer {
- //發送郵件
- publicvoid sendMail();
- }
然后定一個實現IMailer接口的MailerAdapter類。
下面我們來看看MailerAdapter的實現方法。
通過繼承實現Adapter
MailerAdapter.java
- class MailerAdapter extends OutMailerimplements IMailer {
- //發送郵件
- publicvoid sendMail() {
- //調用OutMailer.sendMail()方法實現郵件發送
- this.sendMail();
- }
- //這里省略其他方法
- }
通過委讓實現Adapter
MailerAdapter.java
- class MailerAdapter implements IMailer {
- private OutMailer outMailer =new OutMailer();
- //發送郵件
- publicvoid sendMail() {
- //調用OutMailer.sendMail()方法實現郵件發送
- outMailer.sendMail();
- }
- //這里省略其他方法
- }
不管是通過繼承實現Adapter,還是通過委讓實現Adapter,調用方MailerClient的調用方法完全一樣,如下:
MailerClient.java
- IMailer mailer =new MailerAdapter();
- ...
- mailer.sendMail();
我們可以看到,這里完全沒有直接調用OutMailer,也就是說OutMailer即使被替換了,我們也不用對MailerClient做任何修改。
原文鏈接:http://blog.csdn.net/hjm4702192/article/details/7821325