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

本文通过具体示例详细解析适配器模式的应用场景与实现方式,展示了如何通过适配器解决不同接口之间的兼容问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

这里有一个“中国学生接口”,定义了“说中国话”和“听中国话两个方法”
//中国学生接口
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接口。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值