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

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

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

//中国学生接口

public interfaceChineseStudent {voidspeakChinese();voidlistenChinese();

}//中国学生类

public class ChineseStudent1 implementsChineseStudent {publicString name;publicChineseStudent1(String name){this.name =name;

}

@Overridepublic voidspeakChinese() {

System.out.println("学生:" + name + "说话");

}

@Overridepublic voidlistenChinese() {

System.out.println("学生:" + name + "聆听");

}

}//测试方法

public classTest {public static voidmain(String[] args) {

ChineseStudent chineseStudent= new ChineseStudent1("zhangsan");

chineseStudent.speakChinese();

chineseStudent.listenChinese();

}

}

测试结果:

学生:zhangsan说话

学生:zhangsan聆听

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

//外国学生类

public classForeignStudent {privateString name;publicForeignStudent(String name){this.name =name;

}public voidspeakEnglish(){

System.out.println("学生:" + name + "说话");

}public voidlistenEnglish() {

System.out.println("学生:" + name + "聆听");

}

}

//适配器类

public class Translator implementsChineseStudent{//实例外国学生类ForeignStudent foreignStudent= new ForeignStudent("Joe");

@Overridepublic voidspeakChinese() {

foreignStudent.speakEnglish();

}

@Overridepublic voidlistenChinese() {

foreignStudent.listenEnglish();

}

}

//测试方法

public classTest {public static voidmain(String[] args) {

ChineseStudent chineseStudent= new ChineseStudent1("zhangsan");

chineseStudent.speakChinese();

chineseStudent.listenChinese();

ChineseStudent foreignStudent= newTranslator();

foreignStudent.speakChinese();

foreignStudent.listenChinese();

}

}

测试结果:

学生:zhangsan说话

学生:zhangsan聆听

学生:Joe说话

学生:Joe聆听

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值