第七式 适配器模式

 适配器模式

生活中的适配器

  生活中适配器到处可见,我们大家使用的笔记本电脑的适配器,可以让我们在全世界使用,即使日本的交流电是110V而我国是220V。还有就是插头插座转换的适配器,当你的电器插头是3脚,而你家只有2孔插座,可以买一个3脚转2脚的适配器。

 

面向对象适配器

  假设有一个软件系统,你希望它能和一个新的厂商搭配使用,但是这个心厂商所涉及出来的接口,不同于旧厂商的接口:

  

  你不想改变现在有的代码,解决这个问题(而且也不想改变厂商的代码)。解决这个问题,可以写一个类,将厂商的接口转变成所期望的接口。

  

  这个适配器工作起来就如同一个中间人,它将客户所发出的请求转换成厂商类能理解的请求。

  

 

 

 什么是适配器模式

  适配器模式:将一个类的接口,转换成客户期望的另一个接口。适配器让原来接口不兼容的类可以合作无间。

  类图:

   

   

   这个适配器模式充满着良好的OO设计原则:使用对象组合,以修改的接口包装被设配者:这种做法还有额外的优点,那就是,被适配者的任何子类,都可以搭配着适配器使用。

 

 代码

  现在NBA季后赛激战正酣,昨天火箭被勇士淘汰。以后姚明在火箭的时候就关注上火箭了。为什么说这个呢,姚明是我们的骄傲,他02年以状元秀进入NBA时,是不会英文的,虽然之后他的英文666,,但当时他怎么跟教练队友交流呢?答案是球队给他配备了一个翻译,那个翻译就是适配器,这种解决方案就是适配器模式。我们用代码模拟一下这个过程

 

/**
 * NBA球员接口
 */
public interface Player {
    public void talk();
}

 

  

public class Kobe implements Player {
    public void talk() {
        System.out.println("I say English");
    }
}

 

 

public class Yao {
    public void say(){
        System.out.println("我说中文");
    }
}

 

 

/**
 * 姚明的翻译者
 */
public class Translator implements Player {
    private Yao yao;

    public Translator(Yao yao){
        this.yao=yao;
    }

    public void talk() {
        yao.say();
        System.out.println("translate to english");
    }
}

 

 

    /**
     * 客户端调用,模拟跟教练交流;科比可以说英文可以跟教练自由沟通
     * 姚明需要通过翻译
     */
    public static void main(String[] args){
        Kobe kobe = new Kobe();
        Yao yao = new Yao();
        Translator translator = new Translator(yao);
        kobe.talk();
        translator.talk();
    }

 

posted @ 2019-05-12 13:49  spiritofstorm  阅读(103)  评论(0编辑  收藏  举报