设计模式之适配器模式

丶灬走出姿态 提交于 2020-02-10 04:55:23

注解:适配器模式的设计原则是“只和朋友交谈”

总结:将一个类的接口转换成客户期望的另一个接口。
适配器让原本不兼容的类可以合作无间。
当要使用一个现的类而其接口冻符合你的需要时,就使用适配器。

 

你可能会经常遇到下面这种情况,厂家提供的接口和你写的接口合不上,怎么办??

这时候你不想改变自己的接口来适应厂家的接口,同时你又不能改变厂家的接口,那么这个时候你就应该考虑使用适配器模式了。

 

厂家调用他们的接口,而实际上我们给的却是看似像厂家的接口的接口。

 

通过上图我想大家应该很清楚了吧,这个模式很简单的。但是却是很有用的。

 

鸭子接口(厂家提供的接口)
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图如下:

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!