zoukankan      html  css  js  c++  java
  • java设计模式--适配器模式

    适配器模式:将一个本不能兼容客户端的类的接口通过适配器转为可以兼容的接口。

      这里有一个“中国学生接口”,定义了“说中国话”和“听中国话两个方法”

    //中国学生接口
    public interface ChineseStudent {
        void speakChinese();
    
        void listenChinese();
    }
    
    //中国学生类
    public class ChineseStudent1 implements ChineseStudent {
    
        public String name;
    
        public ChineseStudent1(String name){
            this.name = name;
        }
    
        @Override
        public void speakChinese() {
            System.out.println("学生:" + name + "说话");
        }
    
        @Override
        public void listenChinese() {
            System.out.println("学生:" + name + "聆听");
        }
    }
    
    //测试方法
    public class Test {
        public static void main(String[] args) {
            ChineseStudent chineseStudent = new ChineseStudent1("zhangsan");
            chineseStudent.speakChinese();
            chineseStudent.listenChinese();
        }
    }

    测试结果:

    学生:zhangsan说话
    学生:zhangsan聆听

      此时如果来了一个外国学生呢,这个外国学生不会说中文并且也听不懂中文,那么他如何去和其他中国学生交流呢,此时我们就需要一个“翻译”——适配器

    //外国学生类
    public class ForeignStudent {
    
        private String name;
    
        public ForeignStudent(String name){
            this.name = name;
        }
    
        public void speakEnglish(){
            System.out.println("学生:" + name + "说话");
        }
    
        public void listenEnglish() {
            System.out.println("学生:" + name + "聆听");
        }
    
    }
    //适配器类
    public class Translator implements ChineseStudent{
    
        //实例外国学生类
        ForeignStudent foreignStudent = new ForeignStudent("Joe");
    @Override
    public void speakChinese() { foreignStudent.speakEnglish(); } @Override public void listenChinese() { foreignStudent.listenEnglish(); } }
    //测试方法
    public class Test {
        public static void main(String[] args) {
            ChineseStudent chineseStudent = new ChineseStudent1("zhangsan");
            chineseStudent.speakChinese();
            chineseStudent.listenChinese();
    
            ChineseStudent foreignStudent = new Translator();
            foreignStudent.speakChinese();
            foreignStudent.listenChinese();
        }
    }

    测试结果:

    学生:zhangsan说话
    学生:zhangsan聆听
    学生:Joe说话
    学生:Joe聆听

    这样的话即使外国学生类不能直接实现“说中文”和“听中文”方法,但是通过适配器就完成了这一操作,便兼容了ChineseStudent接口。

    总结:虽然适配器模式可以去兼容接口,但是这种操作通常是维护时不希望去改变兼容方与被兼容方的类时才被考虑的方法,如果在开发时能考虑到接口不兼容的问题,及时解决,通常问题就不会扩大到去兼容接口的程度。

  • 相关阅读:
    Linux 下Firefox无法打开在'.domain'之前带有中划线的域名
    [Shell] 简单的自动检查ssh代理是否正常的脚本
    linux日志自动分割shell
    2014年学习计划
    [genome shell]标题栏优化
    什么样才叫解决问题?
    [mysql]清除单表大量数据方法(需保留部分数据)
    用linux c求最大公约数
    解决64位debian下无法安装ia32库的问题
    postfix邮箱服务器修改附件大小限制遇到的问题与解决
  • 原文地址:https://www.cnblogs.com/yimengyizhen/p/11146216.html
Copyright © 2011-2022 走看看