一、概述
在軟件開發中,常常會想要復用一個已經存在的組件,但該組件的接口卻與我們的需要不相符,這時我們可以創建一個適配器,在需復用的組件的接口和我們需要的接口間進行轉換,從而能夠正常的使用需復用的組件。這就是適配器模式。
二、適配器模式
適配器模式將一個類的接口轉換成客戶希望的另一個接口,使得原本由於接口不兼容而不能一起工作的那些類可以一起工作。
適配器模式可分為類適配器和對象適配器兩種,類適配器使用多重繼承對兩個接口進行匹配,對象適配器則依賴於對象的組合。
類適配器模式的結構圖如下:
對象適配器模式的結構圖如下:
Target定義了客戶需要使用的接口。
Adaptee定義了已經存在的那個接口,該接口需要通過適配器轉換成Target接口以便Client調用。
Adapter對Adaptee接口和Target接口進行適配。
三、示例
我們來看一下適配器模式的應用場景。假定.NET類庫中沒有實現Stack,而我們在應用中需要用到Stack,這時就可以通過適配器模式將List的接口轉換為Stack需要的接口。
首先定義Stack接口
1 interface IStack<T> 2 { 3 void Push(T item); 4 T Pop(); 5 }
接口實現Adapter
1 public class MyStack<T> : IStack<T> 2 { 3 private List<T> _list = new List<T>(); 4 5 public void Push(T item) 6 { 7 _list.Add(item); 8 } 9 10 public T Pop() 11 { 12 T item = _list[_list.Count - 1]; 13 _list.RemoveAt(_list.Count - 1); 14 return item; 15 } 16 17 public void PrintAll() 18 { 19 Console.WriteLine("Begin Print Stack Item"); 20 foreach (T item in _list) 21 { 22 Console.WriteLine(item.ToString()); 23 } 24 Console.WriteLine("End Print Stack Item"); 25 } 26 }