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

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

  • 相关阅读:
    使用Koa搭建一个mock服务器
    d3 使用记录: 树形图
    转载: 矩阵的运算及运算规则
    d3 使用记录: 插值
    d3 使用记录: Selection
    转载: javascript 模块化历程
    Git 常用操作
    贝塞尔曲线_初探
    css 基础-
    Freemarker模板语法
  • 原文地址:https://www.cnblogs.com/yimengyizhen/p/11146216.html
Copyright © 2011-2022 走看看