适配器模式就相当于一个翻译,来处理两个人语言之间的障碍。
下面文字来源于深入浅出设计模式,进一步了解什么是适配器模
假设有一个系统,你希望他能和一个新的厂商类库搭配使用起来,但是新的厂商所设计的接口
不同于旧常桑的接口,
你不想改变现有的代码,解决这个问题(而且你也不能改变厂商的代码)。所以该怎么办呢
这个嘛,你可以写一个类,将新厂商的 接口转接成你所期望的接口
这个适配器工作起来就如同一个中间商,他将客户所发出的请求转换成厂商类能够理解的请求
实现代码:
现有系统代码:
//鸭子接口
public interface Duck
{
string Quack();
string Fly();
}
//绿头鸭子类
public class MallardDuck:Duck
{
public MallardDuck(){}
public string Quack()
{
return "I'm Quack";
}
public string Fly()
{
return "I'm can flying";
}
}
厂商接口
//火鸡接口
public interface Turkey
{
string Gobble();
string Fly();
}
//火鸡
public class WildTurkey:Turkey
{
public WildTurkey(){}
public string Gobble()
{
return "I'm Gobble";
}
public string Fly()
{
return "I'm flying a short distance";
}
}
实现厂商和原有系统对话
//火鸡适配器
public class TurkeyAdapter:Duck
{
Turkey turkey;
public TurkeyAdapter(Turkey trukey)
{
this.turkey = trukey;
}
public string Quack()
{
return turkey.Gobble();
}
public string Fly()
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 5;i++)
{
sb.Append(turkey.Fly());
sb.Append("\n");
}
return sb.ToString();
}
}
使用示例
public class DuckTest
{
public static void Main()
{
MallardDuck duck = new MallardDuck();//创建一个鸭子
WildTurkey turkey = new WildTurkey();//创建一个火鸡
Duck turkeyAdapter = new TurkeyAdapter(turkey);//将火鸡放到适配器中,是它看起来像只鸭子
Console.WriteLine("鸭子和火鸡开始对话了");
Console.WriteLine("火鸡说" + turkey.Gobble());
Console.WriteLine("火鸡说" + turkey.Fly());
Console.WriteLine("鸭子说" + duck.Quack());
Console.WriteLine("鸭子说" + duck.Fly());
Console.WriteLine("适配器说" + turkeyAdapter.Quack());//鸭子还是一直以为我是只鸭子,其实我是只火鸡
Console.WriteLine("适配器说" + turkeyAdapter.Fly());//适配器已经实现接口之间的交流
}
}