注解:适配器模式的设计原则是“只和朋友交谈”
总结:将一个类的接口转换成客户期望的另一个接口。
适配器让原本不兼容的类可以合作无间。
当要使用一个现的类而其接口冻符合你的需要时,就使用适配器。
你可能会经常遇到下面这种情况,厂家提供的接口和你写的接口合不上,怎么办??
这时候你不想改变自己的接口来适应厂家的接口,同时你又不能改变厂家的接口,那么这个时候你就应该考虑使用适配器模式了。
厂家调用他们的接口,而实际上我们给的却是看似像厂家的接口的接口。
通过上图我想大家应该很清楚了吧,这个模式很简单的。但是却是很有用的。

namespace 适配器模式{ /// <summary> /// 鸭子接口(厂家提供的接口) /// </summary> public interface IDuck { /// <summary> /// 嘎嘎叫 /// </summary> void Rattle(); /// <summary> /// 飞行 /// </summary> void Fly(); }}

1 namespace 适配器模式 2 { 3 /// <summary> 4 /// 火鸡(被适配的接口) 5 /// </summary> 6 public interface ITurkey 7 { 8 /// <summary> 9 /// 咯咯叫10 /// </summary>11 void Giggling();12 13 /// <summary>14 /// 飞行15 /// </summary>16 void Fly();17 }18 }

1 namespace 适配器模式 2 { 3 /// <summary> 4 /// 绿毛鸭子(客户的实现) 5 /// </summary> 6 public class GreenDuck : IDuck 7 { 8 public void Rattle() 9 {10 Console.WriteLine("发出声音!");11 }12 13 public void Fly()14 {15 Console.WriteLine("在飞行!");16 }17 }18 }19
红色火鸡(我们的实现)
1 namespace 适配器模式 2 { 3 /// <summary> 4 /// 红色火鸡(我们的实现) 5 /// </summary> 6 public class RedTurkey : ITurkey 7 { 8 9 public void Giggling()10 {11 Console.WriteLine("发出声音!");12 }13 14 public void Fly()15 {16 Console.WriteLine("在飞行!");17 } 18 }19 }20
适配器(把火鸡伪装成鸭子)
1 namespace 适配器模式 2 { 3 /// <summary> 4 /// 适配器(把火鸡伪装成鸭子) 5 /// </summary> 6 public class TurkeyAdapter : IDuck 7 { 8 public TurkeyAdapter(ITurkey turkey) 9 {10 this.Turkey = turkey;11 }12 13 ITurkey Turkey { get; set; }14 15 public void Rattle()16 {17 Turkey.Giggling();18 }19 20 public void Fly()21 {22 Turkey.Fly();23 }24 }25 }26
uml图如下:
来源:https://www.cnblogs.com/homezzm/archive/2009/12/08/1619116.html