標籤:style blog http color 使用 2014 問題 ar
1、適配器模式意圖
定義:將一個類的介面轉換成客戶希望的另外一個介面,Adapter模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。
2、適配器角色
目標介面(Target):客戶所期待的介面,目標可以是具體的或抽象的類,也可以是介面
需要適配的類(Adaptee):需要適配的類或者適配者類。
適配器(Adapter):通過封裝一個需要適配的對象,把原介面轉成成目標介面
:
3、適配器模式類型 類適配器模式:
當客戶在介面中定義了他期望的行為時,我們就可以應用適配器模式了,提供一個實現該介面的類,並且擴充已有的類,通過建立子類來實現適配
對象適配器模式:
對象適配器"通過組合除了滿足"使用者期待的介面,還降低了代碼間的不良耦合。
預設適配器模式:
預設適配器模式是一種特殊的適配器模式,但這個適配器模式是由一個抽象類別實現的,並且在抽象類別中要實現目標介面中所規定的所有方法,但很多方法的實現都是"平庸"的實現,也就是說,這些方法都是空方法,而具體的子類都要繼承此抽象方法。
4、模式總結
優點:
1:通過適配器模式,用戶端可以調用同一個介面,因而對用戶端來說是透明的,這樣做更簡單,更直接,更緊湊。
2:複用了現存的類,解決了現存類和複用環境要求不一致的問題。
3:將目標類和適配者解耦,通過引入一個適配器類重用現有的適配者類,而無需修改原有的代碼。
4:一個對象適配器可以把多個不同的適配者類適配到同一個目標,也就是說,同一個適配者可以把適配者類和它的子類都適配到目標介面
缺點:
對於對象適配器來說,更換適配器的過程實現比較複雜。
5、模式使用情境
1:系統需要使用現有的類,而這些類不符合系統的介面。
2:想要建立一個可以重用的類,用於與一些彼此直接沒有太大關聯的一些類,包括一些可能在將來引進的類一起工作。
3:兩個類所做的事情相同或相似,但是具有不同介面的時候。
4:舊的系統開發的類已經實現了一些功能,但是用戶端卻只能以另外介面的形式訪問,但我們不希望手動更改原有得類的時候。
5:使用第三方組件,組件介面定義和自己定義的不同,不希望修改自己的介面,但是要使用第三方組件介面的功能。
具體詳細代碼如下:
1 void Main() 2 { 3 Target target = new Adapters(); 4 target.Request(); 5 // Result : This Is general category 6 } 7 8 // 使用者所期待的介面 9 public class Target10 {11 public virtual void Request()12 {13 Console.WriteLine("This is a general category");14 }15 }16 17 // 定義適配器類 : 就是我們現在定義的介面18 public class Adaptee19 {20 public void SpecificRequest()21 {22 Console.WriteLine("This Is a Special category");23 }24 }25 26 // 定義適配器 : 用來將我們的介面轉為使用者所期望的介面27 public class Adapter : Target28 {29 private Adapter adapter = new Adapter();30 public override void Request()31 {32 adapter.SpecificRequest();33 }34 35 }