分析&回答
适配器模式是将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
两个成熟的类需要通信,但是接口不同,由于开闭原则,我们不能去修改这两个类的接口,所以就需要一个适配器来完成衔接过程。
变压器就是很好的适配器模式的例子。用电设备所需要的电压是9V,但是电线上的电压却是220V的,我们不能去更改它们的电压输入或输出,所以我们用到了变压器。变压器是220V的输入,9V的输出。这样就可以将200V的电压变为9V的电压,用变压器将用电设备连接到了电线上工作了。
上面图中,都是Client端需要Request这个方法,但是Adaptee没有这个方法,所以就需要提供一个中间件/包装类(Wrapper)Adapter类来衔接。不同的是图(一)中Adapter继承自Adaptee,而第二幅图是在Adapter类中包装了一个Adaptee的实例。这就决定了图(一)讲的是“类的结构模式”,而图(二)中则是“对象的结构模式”。
实例代码讲解:
/**
* 目标接口,客户所期待的接口。
*/
public class Target{
public virtual void Request(){
Console.Write("我是本系统中的普通请求.");
}
}
/**
* 适配器,匹配2个接口不一致的类
*/
public class Adapter:Target{
private Adaptee adaptee = new Adaptee();
public void Request(){
adaptee.SpecificRequest();
}
}
/**
* 源接口,与客户期待的接口不一致
*/
public class Adaptee(){
public void SpecificRequest(){
Console.Write("我是原有的真实调用的系统");
}
}
/**
* client端
* @param args
*/
static void Main(string[] args)
{
Target t = new Adapter();
t.Request();
Console.ReadLine();
}
喵呜面试助手: 一站式解决面试问题,你可以搜索微信小程序 [喵呜面试助手] 或关注 [喵呜刷题] -> 面试助手 免费刷题。如有好的面试知识或技巧期待您的共享!