一. 适配器模式
适配器模式,是将一个类转换成客户期望的另外一个接口。Adapter模式使的原本由于接口不兼容而不能工作的那些类可以一起工作。
适配器模式的目的就是将类的接口转换成客户对象需要的接口,也就是说我们有一个可以满足我们需要的对象,但是它的接口却不是我们所期望的那样,而我们现在所需要的就是创建一个新的接口,让原本的接口能够满足我们的需要。就像是美国的电源是110V,中国是220V,美国电器来到中国用,必须要通过一个变压器(适配器)来把电流改成110V才能正常使用。
二 适配器的分析
1.客户期待的接口或者抽象类Target
/// <summary> /// 客户期待的接口或者抽象类Target /// </summary> public abstract class Target { public abstract void Request(); }
2.要适配的类Adaptee,也就是与期望调用接口不相符的类
代码
/// <summary> /// 要适配的类Adaptee,也就是与期望调用接口不相符的类 /// </summary> public class Adaptee { public void SpecificRequest() { Console.WriteLine( " 执行要适配类的特殊请求方法! " ); } }
3 适配器类Adapter把源接口转换成目标接口,包括变量adaptee
代码
/// <summary> /// 适配器类Adapter,把源接口转换成目标接口,包括变量adaptee /// </summary> public class Adapter : Target { public Adapter() { Console.WriteLine( " 构造函数。。。 " ); } private Adaptee adaptee; public override void Request() { if (adaptee == null ) { adaptee = new Adaptee(); } adaptee.SpecificRequest(); } }
4 客户端代码
static void Main( string [] args){ Target target = new Adapter(); target.Request(); Console.Read();}
5运行结果
三 适配器事例
1.一个基类AdapterPlayer,包含进攻和防守。不同位置都有不同的实现。但是最终大家都适配到了AdapterPlayer上
2.程序
代码
/// <summary> /// 篮球运动员 /// </summary> public abstract class AdapterPlayer { protected string name; public AdapterPlayer( string name) { this .name = name; } public abstract void Attack(); public abstract void Defense(); } /// <summary> /// 前锋 /// </summary> public class Forwards : AdapterPlayer { public Forwards( string name) : base (name) { } public override void Attack() { Console.WriteLine( " 前锋 {0} 进攻 " ,name); } public override void Defense() { Console.WriteLine( " 前锋 {0} 防守 " ,name); } } /// <summary> /// 中锋 /// </summary> public class Center : AdapterPlayer { public Center( string name): base (name) { } public override void Attack() { Console.WriteLine( " 中锋 {0} 进攻 " , name); } public override void Defense() { Console.WriteLine( " 中锋 {0} 防守 " , name); } } /// <summary> /// 后卫 /// </summary> public class Guards : AdapterPlayer { public Guards( string name) : base (name) { } public override void Attack() { Console.WriteLine( " 后卫 {0} 进攻 " , name); } public override void Defense() { Console.WriteLine( " 后卫 {0} 防守 " , name); } } /// <summary> /// 外籍中锋 /// </summary> public class ForeignCenter { private string _name; public string Name { get { return _name; } set { _name = value; } } public void FAttack() { Console.WriteLine( " 外籍中锋 {0} 进攻 " , Name); } public void FDefense() { Console.WriteLine( " 外籍中锋 {0} 防守 " , Name); } } /// <summary> /// 翻译者 /// </summary> public class Translator : AdapterPlayer { private ForeignCenter fc = new ForeignCenter(); public Translator( string name) : base (name) { fc.Name = name; } public override void Attack() { fc.FAttack(); } public override void Defense() { fc.FDefense(); } }
2. 客户端代码
代码
static void Main( string [] args) {
AdapterPlayer ap = new Forwards( " 巴蒂尔 " ); ap.Attack(); AdapterPlayer ap1 = new Guards( " 麦克格雷迪 " ); ap1.Attack(); AdapterPlayer ap2 = new Translator( " YaoMing " ); ap2.Attack(); ap2.Defense(); Console.ReadKey(); }
3.运行结果
四 总结
适配器模式,将一个类装换成客户期望的另外一个接口。Adapter模式统一了不兼容对象的接口,使的原本由于接口不兼容而不能工作的那些类可以一起工作。