zoukankan      html  css  js  c++  java
  • 第七式 适配器模式

     适配器模式

    生活中的适配器

      生活中适配器到处可见,我们大家使用的笔记本电脑的适配器,可以让我们在全世界使用,即使日本的交流电是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();
        }
  • 相关阅读:
    blktrace分析IO
    Mac-配置SecureCRT
    Mac-安装itellij idea
    Mac-sublime text 3破解版
    Mac-item+zsh
    Mac-安装homebrew
    Mac-装机
    Mac-WIFI总是断网
    Git-ssh登录github
    Git-回滚操作
  • 原文地址:https://www.cnblogs.com/bwyhhx2018/p/10852033.html
Copyright © 2011-2022 走看看