1、概述设计模式
将一个类的接口转换为客户但愿的另一个接口。Adapter模式使得本来因为接口不兼容而不能一块儿工做的那些类能够一块儿工做;ide
2、模式中的角色spa
Target:定义客户端使用的与特定领域相关的接口;设计
Clinet:与符合Target接口的对象协同;code
Adpatee:定义一个已经存在的接口,这个接口须要适配;对象
Adpater:对Adpatee的接口与Target接口进行匹配;blog
3、UML类图接口
4、代码实现ci
/// <summary> /// 客户端期待的类 /// </summary> public class Target { /// <summary> /// 使用virtual修饰以便子类能够重写 /// </summary> public virtual void Request() { Console.WriteLine("这是Target中的Request的方法!"); } } /// <summary> /// 定义须要适配的类 /// </summary> public class Adaptee { public void SpecificRequest() { Console.WriteLine("这是Adaptee中的SpecificRequest方法!"); } } /// <summary> /// 定义适配器类 /// </summary> public class Adapter : Target { Adaptee adaptee = new Adaptee(); /// <summary> /// 经过重写,表面上调用Request()方法,变成了实际调用SpecificRequest() /// </summary> public override void Request() { adaptee.SpecificRequest(); } } /// <summary> /// 客服端代码 /// </summary> /// <param name="args"></param> static void Main(string[] args) { #region 对象适配器 Target target = new Adapter(); target.Request(); #endregion }
获得的结果:get
5、应用场景
5.1 你想使用一个已经存在的类,而它的接口不符合你的需求;
5.2 你想建立一个能够复用的类,该类能够与其余不相关的类或不可预见的类(即那些接口可能不必定兼容的类)协同工做;
5.3 你想使用一些已经存在的子类,可是不可能对每个都进行子类化以匹配它们的接口。对象适配器能够适配它的父类接口;
6、应用举例
ADO.NET中的DataAdapter
参考书籍《设计模式-可复用面向对象软件的基础》