C#设计模式——适配器模式(Adapter Pattern)
一、概述
在软件开发中,常常会想要复用一个已经存在的组件,但该组件的接口却与我们的需要不相符,这时我们可以创建一个适配器,在需复用的组件的接口和我们需要的接口间进行转换,从而能够正常的使用需复用的组件。这就是适配器模式。
二、适配器模式
适配器模式将一个类的接口转换成客户希望的另一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
适配器模式可分为类适配器和对象适配器两种,类适配器使用多重继承对两个接口进行匹配,对象适配器则依赖于对象的组合。
类适配器模式的结构图如下:
对象适配器模式的结构图如下:
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 }