java设计模式--适配器模式

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

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

//中国学生接口
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();
    }
}

测试结果:this

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

 

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

//外国学生类
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();
    }
}

测试结果:code

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

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

总结:虽然适配器模式能够去兼容接口,可是这种操做一般是维护时不但愿去改变兼容方与被兼容方的类时才被考虑的方法,若是在开发时能考虑到接口不兼容的问题,及时解决,一般问题就不会扩大到去兼容接口的程度。开发

相关文章
相关标签/搜索