系统的数据和行为都正确,但接口不符时,我们应该考虑用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配。适配器模式主要应用希望用一些现存的类,但是接口又与复用环境不一致的情况。适配器模式讲了两种类型类适配器模式和对象适配器模式。由于C#、java等语言不支持多重继承,也就是一个类只有一个父类,所以主要用的是对象适配器。
ITarget(这是客户所期待的接口。目标可以是具体的类或抽象的类,也可以是接口)代码如下:
public interface ITarget { void request(); }
Adaptee(需要适配的类)代码如下
public class Adaptee { public void specificRequest(){ System.out.println("特殊请求"); } }
Adapter(通过在内部包装一个Adaptee对象,把源接口转换成目标接口)代码如上
public class Adapter implements ITarget { private Adaptee adaptee=new Adaptee(); @Override public void request() { adaptee.specificRequest(); } }
客户端代码如下
public class Client { public static void main(String[] args) { ITarget target=new Adapter(); //对客户端而言就是调用的Target的Request方法 target.request(); } }
何时使用适配器模式
使用一个已经存在的类,但如果它的接口,也就是它的方法和你的要求不相同时,就应该考虑用适配器模式。
两个类所做的事情相同或相似,但是具有不同的接口时要使用它。而且由于类都共享一个接口,使得客户代码如何?
客户代码可以统一调用同一个接口,这样可以更简单、更直接、更紧凑。适配器模式属于“亡羊补牢”,适合于在代码的维护阶段,在双方都不太容易修改时再使用适配器模式进行适配。