將乙個類的介面轉換為另乙個符合客戶期望的介面
達到的目的:
有兩種:
我這裡就拿使用三腳插頭充電的蘋果手機(港版充電器)來舉個例子吧~和圖中例子相反
inte***ce iphonecharger
// target
inte***ce primarycharger
// adaptee
// 蘋果手機實現蘋果手機充電器介面
class iphone implements iphonecharger
}// adapter
// 普通充電器介面卡 - 實現普通充電器介面 - 使蘋果手機等其他充電器可以適配普通2腳充電器進行充電
class primarychargeradapter implements primarycharger
chargewith2footer(): void
}}function testdemo()
testdemo();
客戶使用介面卡的過程解析:
客戶通過目標介面呼叫介面卡的方法對介面卡發起請求
介面卡使用被適配者介面把請求換成被適配者的乙個或多個呼叫介面
客戶收到呼叫的結果,但未察覺一切是介面卡的轉換作用。
// 改造成ts形式~~
class oldclassadapter implements newinte***ce
public newmethod(): void
}
物件介面卡模式優點:
(1) 乙個物件介面卡可以把多個不同的適配者適配到同乙個目標;
(2) 將目標類和被適配者類解耦,通過引入乙個介面卡類來重用現有的被適配者類,無須修改原有結構。
過多的使用介面卡,會讓系統非常零亂,不易整體進行把握。比如,明明看到呼叫的是 a 介面,其實內部被適配成了 b 介面的實現.
先看下面這段熟悉的**~~ 摘自 @遠峰
// 統一的介面適配不同類
// target 客戶期望使用的介面
inte***ce computerinte***ce
// adaptee
class huaweiphone
}// adaptee
class iphone
}// class adapter
class huaweidatawireadapter extends huaweiphone implements computerinte***ce
}class iphonedatawireadapter extends iphone implements computerinte***ce
}function commonadapterdemo()
commonadapterdemo();
note:外觀和介面卡模式都可以包裝許多類,但是外觀模式是為了簡化操作,而介面卡模式是將介面轉換為不同接 設計模式之介面卡模式(類介面卡模式)
介面卡模式,即定義乙個包裝類,用於包裝不相容介面的物件 包裝類 介面卡adapter 被包裝物件 適配者adaptee 被適配的類 把乙個類的介面變換成客戶端所期待的另一種介面,從而使原本介面不匹配而無法一起工作的兩個類能夠在一起工作。介面卡模式的形式分為 類的介面卡模式和物件的介面卡模式 模式原理...
設計模式之 介面卡模式
1,介面卡模式把乙個類的介面變換成客戶端所期待的另一種介面,從而使原本因介面不匹配而無法一起工作的兩個類能夠在一起工作 2,介面卡模式有兩種 1 類的介面卡模式 介面卡類繼承源類 這樣介面卡類就繼承了源類有的方法 並實現目標介面,實現在源類中沒有而在介面中有的方法,從而實現介面卡類有目標介面的所有方...
設計模式之介面卡模式
介面卡模式定義 將乙個類的介面,轉換成客戶期望的另乙個介面。介面卡讓原本介面不相容的類可以合作無間。簡單定義 封裝物件,並提供不同的介面。簡單例子 鴨子介面 package headfirst.adapter.ducks public inte ce duck 具體鴨子 package headfi...