适配器模式

来源:互联网 发布:无线网测试软件 编辑:程序博客网 时间:2024/06/07 06:17

适配器模式

什么是适配器模式
当你想使用一个已有的类,但是这个类的接口跟你的又不一样,不能拿来直接用,这个时候你就需要一个适配器。

适配器模式类图
假如你去香港旅游,买的iphone6的充电器插头是英标的,是三脚的方形的插头。而我们国标的插头是两只脚。

在国内的家中只能用国标接口进行充电。

`    //国标插头    public interface CnPlugInterface {        void chargeWith2Pins();    }    //实现国标插座的充电方法    public class CnPlugin implements CnPluginInterface {        public void chargeWith2Pins() {            System.out.println("charge with CnPlugin");        }    }    //在国家中内充电    public class Home {        private CnPluginInterface cnPlugin;        public Home() {}        public Home(CnPluginInterface cnPlugin) {            this.cnPlugin = cnPlugin;        }        public void setPlugin(CnPluginInterface cnPlugin) {            this.cnPlugin = cnPlugin;        }        //充电        public void charge() {            cnPlugin.chargeWith2Pins();        }    }`

然而,当把iphone6带回来时,因为与家里的插座不匹配,所以需要一个适配器。这个适配器必须满足以下条件:

  1. 必须符合国内标准的接口,否则的话还是没办法插到国内插座中;
  2. 在调用上面实现的国标接口进行充电时,提供一种机制,将这个调用转到对英标接口的调用。

这就要求:

  1. 适配器必须实现原有的旧的接口
  2. 适配器对象中持有对新接口的引用,当调用旧接口时,将这个调用委托给实现新接口的对象来处理,也就是在适配器对象中组合一个新接口。

    `
    //英标插头
    public interface EnPluginInterface {
    void chargeWith3Pins();
    }
    //实现英标插座的充电方法
    public class EnPlugin implements EnPluginInterface {
    public void chargeWith3Pins() {
    System.out.println(“charge with EnPlugin”);
    }
    }

    //适配器public class PluginAdapter implements CnPluginInterface {    private EnPlugInterface enPlugin;    public PluginAdapter(EnPluginInterface enPlugin) {        this.enPlugin = enPlugin;    }    public void chargeWith2Pins() {        enPlugin.chargeWith3Pins();    }}//适配器测试类public class AdapterTest {    public static void main(String[] args) {        EnPluginInterface enPlugin = new EnPlugin();        Home home = new Home();        PluginAdapter pluginAdapter = new PluginAdapter(enPlugin);        home.setPlugin(pluginAdapter);        home.charge();    }}

    `

适配器的三个特点:

  • 适配器对象实现原有接口
  • 适配器对象组合一个实现新接口的对象
  • 对适配器原有接口方法的调用被委托给新接口的实例的特定方法。
原创粉丝点击