1 适配器模式
将一个类的接口转成客户希望的另一个接口。adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。
需要适配的类(Adaptee):需要适配的类或适配者类。
适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口。
2 适用场景
已经存在的类的接口不符合我们的需求;
创建一个可以复用的类,使得该类可以与其他不相关的类或不可见的类协同工作;
3 代码实现
/// <summary> /// 定义客户端期待的接口 /// </summary> public class Target { /// <summary> /// 使用virtual修饰以便子类可以重写 /// </summary> public virtual void Request() { Console.WriteLine("This is a common request"); } } /// <summary> /// 定义需要适配的类 /// </summary> public class Adaptee { public void SpecificRequest() { Console.WriteLine("This is a special request."); } } /// <summary> /// 定义适配器 /// </summary> public class Adapter:Target { // 建立一个私有的Adeptee对象 private Adaptee adaptee = new Adaptee(); /// <summary> /// 通过重写,表面上调用Request()方法,变成了实际调用SpecificRequest() /// </summary> public override void Request() { adaptee.SpecificRequest(); } }
class Program { static void Main(string[] args) { // 对客户端来说,调用的就是Target的Request() Target target = new Adapter(); target.Request(); Console.Read(); } }
4 模式总结
4.1 优点
4.1.1 通过适配器,客户端可以调用统一接口,因而对客户端来说是透明的。这样做更简单,更直接,
4.1.2 复用了现有的类,解决了现有类和复用环境不一致的问题;
4.1.3 将目标类和适配者解耦,通过引入一个适配器类重用,无需修改原有代码。
4.1.4 一个对象适配器可以把多个不同的适配者类适配到同一目标,也就是说,同一适配器可以把适配者和它的子类都适配到目标接口。