首页 > 技术文章 > 适配器

AshOfTime 2019-03-31 17:43 原文

  如果一个对象实现的接口不满足某个方法的参数要求,又想要这个方法调用这个对象的时候,使用中间对象适配器来解决这个矛盾。

  

  客户类Clinet#MyRequest方法需要传入一个实现了Target接口的对象,并调用Target#request方法。但此时只有实现了 specialTarget了接口的Adaptee对象,在不改变源码的情况下使用适配器Adaptor来调和矛盾。首先从语法角度Adaptor一定要实现Target接口,这样才能传入MyRequest方法,而且Adaptor还要能够调用Adaptee的specialRequest去满足request调用的需求,我更喜欢把这种模式成为欺骗消费者模式。

  欺骗消费者的方式有两种,一种是继承Adaptee这种被称为类适配器,一种是把Adaptee当做内部的属性被称为对象适配器。

public class Adaptee implements specialTarget{

@Override
public void specialRequest() {
System.out.println("我是Adaptee 我只实现了specialTarget#specialRequest 爱用不用");
}
}

public
class Client { public void MyRequest(Target target){ System.out.println("我是客户 我现在要一个实现了target的对象"); target.request(); } public static void main(String[] args) { Client client = new Client(); Adaptee adaptee = new Adaptee(); //client.MyRequest(adaptee); Adaptor adaptor = new Adaptor(); client.MyRequest(adaptor); } }

 

public class Adaptor extends  Adaptee implements Target{
    @Override
    public void request() {
        System.out.println("我是Adaptor 你们的矛盾我来解决");
        super.specialRequest();
    }
}

 

推荐阅读