小明的水果店远近闻名,招来了很多外国朋友,但是小明有不会英文,没办法跟他们沟通,所以小明请了一个翻译既懂英文又懂中文的小翻译。这个翻译通过把英文转换成中文跟小明对话。一般来说这个翻译我们称之为适配器
适配器模式(Adapter Pattern):将一个类的接口转换成客户希望的另一个接口,适配器模式让那些接口不兼容的类可以一起工作
适配器模式的结构
Target(目标抽象类):目标抽象类定义客户端所需的接口可以是一个具体类,也可以是一个接口
public interface Target
{
void Request();
}
Adapter(适配器类):这个类的主要功能就是实现target的接口并且继承Adaptee类,使二者产生关联,adapter类是适配器的核心
public class Adapter : Target
{
public Adaptee adaptee;
public Adapter(Adaptee adaptee)
{
this.adaptee = adaptee;
}
public void Request()
{
adaptee.SpecificRequest();
}
}
Adaptee(适配者类):适配者是被适配的角色
public class Adaptee
{
public void SpecificRequest()
{
Console.WriteLine("1");
}
}
实现
Adaptee adaptee = new Adaptee();
Target target = new Adapter(adaptee);
target.Request();
适配器模式的优点:
1.将目标类和适配者类解耦
2.增加了类的透明性和复用性,提高了适配者的复用性
3.可以通过配置文件更换适配器,增加了灵活性和扩展性
适配器模式的缺点:
1.对于不能多重继承的语言来说,一次最多只能适配一个适配者
2.适配者类不能成为最终类,不能用sealed标志
3.一般来说目标抽象类只能是接口,因为不能继承多个类,使之有些局限性
适配器的适用环境:
1.系统需要使用一些现有的类,而这些接口不符合系统内的要求,需要转换一下才可以使用
2.适配器模式将一个类的接口转换成客户希望的另一个接口