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接口。

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

  • 相关阅读:
    学习Mybatis与mysql数据库的示例笔记
    SpringAOP学习笔记
    idea开发ssh(Spring+struts+Hibernate)实现对MySQL数据库的增删改查
    springmvc加vue实现前后端数据的跨域访问
    idea开发工具springmvc加vue.js实现MySQL数据库的查询操作
    利用idea开发工具实现ssh(spring+struts+hibernate)加vue.js前后台对数据库的查询
    appweb 7.0.2版本编译
    Unable to register the DLL/OCX: RegSvr32 failed with exit code 0x3 我的解决方法
    无法定位程序输入点 InitializeCriticalSectionEx 于动态链接库 Kernel32.dll 上 问题解决方法
    海思3516D + IMX291图像闪烁问题定位
  • 原文地址:https://www.cnblogs.com/yimengyizhen/p/11146216.html
Copyright © 2011-2022 走看看