适配器(Adapter) 模式: 将一个类的接口转换成客户希望的另外一个接口。 Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
当系统的数据和行为都正确, 但接口不符时, 我们应该考虑用适配器, 目的是使控制范围之外的一个原有对象与某个接口匹配。 适配器模式主要应用于希望复用一些现存的类, 但是接口又与复用环境要求不一致的情况。
* 适配器模式有两种模式 : 1、类适配器模式 (c++ 语言支持, Java、c#等语言不支持多继承,所有不支持此模式) 2、对象适配器模式(本文所讲模式) 。
Targer 类:这是客户所期待的接口。目标可以是具体的或抽象的类, 也可以是接口。
class Target {
public virtual void Request(){
Console.WriteLine("普通请求!");
}
}
Adaptee (需要适配的类):
class Adaptee{
public void SpecificRequest(){
Console.WriteLine("特殊请求!");
}
}
Adapter 通过在内部包装一个Adapter 对象把原接口转换成目标接口
class Adapter{
private Adaptee adaptee = new Adaptee();
public override void Request(){
adaptee.SpecificRequest();
}
}
客户端代码如下:
static void Main(string args[]){
Traget target = new Adapter();
target.Request();
Console.Read();
}
何时使用适配器模式:
使用一个已经存在的类,但如果它的接口, 也就是它的方法和你的要求不相同时, 就应该考虑用适配器模式。
两个类所做的事情相同或相似, 但是具有不同的接口时要使用它。 客户代码可以统一调用统一接口,这样可以更简单、更紧凑、更直接。
要在双方都不太容易修改时再使用适配器模式适配。