adapter模式也叫介面卡模式,是構造型模式之一,通過adapter模式可以改變已有類(或外部類)的介面形式。
舉個例子:我們使用電腦,家裡的電源是220v的,而我們的電腦是18v的,這時如果我們直接把電源連線電腦,一定會導致電腦被燒壞,因為電源電壓太高了,這時我們就需要乙個電源介面卡,連線在電源與電腦之間,通過介面卡進行乙個降壓,來保證電腦的正常工作。
增加介面卡
用**實現:
首先如果不使用介面卡的話
新建乙個220v電源
//220v電源
public
class
powersupply
}
新建乙個膝上型電腦,使用電源
//膝上型電腦使用220v電源
public
class
computer
}
這樣膝上型電腦就直接使用了220v電壓,但是這樣的話,膝上型電腦會直接燒毀,無法使用,因為電壓太高了,所以我們需要在中間接乙個介面卡,以達到降壓的目的
介面卡繼承220v電壓
//介面卡
public
class
adapter
extends
powersupply
}
膝上型電腦通過介面卡呼叫電源
//膝上型電腦通過介面卡使用220v電源
public
class
computer
}
結果如下:
可以看到,通過這種形式,我們使用的還是之前的那個電源,但是通過介面卡,電壓就降到了18v,電腦就可以正常使用了。
但是這只是介面卡模式的其中一種形式。
下面更詳細的說明一下介面卡模式
在大規模的系統開發過程中,我們常常碰到諸如以下這些情況:
我們需要實現某些功能,這些功能已有還不太成熟的乙個或多個外部元件,如果我們自己重新開發這些功能會花費大量時間;所以很多情況下會選擇先暫時使用外部元件,以後再考慮隨時替換。但這樣一來,會帶來乙個問題,隨著對外部元件庫的替換,可能需要對引用該外部元件的源**進行大面積的修改,因此也極可能引入新的問題等等。如何最大限度的降低修改面呢?
adapter模式就是針對這種類似需求而提出來的。adapter模式通過定義乙個新的介面(對要實現的功能加以抽象),和乙個實現該介面的adapter(介面卡)類來透明地呼叫外部元件。這樣替換外部元件時,最多只要修改幾個adapter類就可以了,其他源**都不會受到影響。
簡單來說:
1、 系統需要使用現有的類,而這些類的介面不符合系統的需要。
2、 想要建立乙個可以重複使用的類,用於與一些彼此之間沒有太大關聯的一些類,包括一些可能在將來引進的類一起工作。
3、 需要乙個統一的輸出介面,而輸入端的型別不可預知。
這種形式,就是我們剛才舉的例子
client:就是膝上型電腦(computer)
target:就是膝上型電腦中呼叫的方法(adapter.powersupply18v())
adaptee:就是220v電壓(powersupply)
adapter:就是介面卡(adapter)
第二種模式,只需修改介面卡與電腦即可
介面卡不再繼承電源,而是當成乙個成員變數
//介面卡
public
class
adapter2
public
void
powersupply18v()
}
電腦
//膝上型電腦通過介面卡使用220v電源
public
class
computer
}
一般,使用第二種委讓形式更多一些,因為這種方式不必繼承,使用成員變數更加的靈活。 設計模式 結構型之介面卡模式
將無法直接使用的類的行為委託給乙個新的類,這種類結構叫介面卡模式 該方式適合類中不符合期望的介面數量不多的情況 該方式主要由3部分組成 原始類 public class origin public void dosthb 介面類 public inte ce idapter 介面卡類 public ...
設計模式 結構型 介面卡模式
什麼是介面卡模式 將乙個介面轉換成客戶希望的另乙個介面,使介面不相容的那些類可以一起工作。介面卡模式既可以作為類結構型模式,也可以作為物件結構型模式。介面卡的分類 介面卡中有類介面卡和物件介面卡,兩者的區別在於介面卡與適配者的關係不同,物件介面卡中兩者之間的關係是關聯關係,類介面卡模式中兩者是繼承關...
設計模式 結構型 介面卡
pragma once ifndef adapter h define adapter h 需要被adapt 的類 class target virtual target virtual void request 0 與被adapt 物件提供不相容介面的類 class adaptee adaptee...