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