适配器模式
适配器模式
我问知道,智能手机功能强大,在早些年的时候,可以通过耳机直接连接手机音频接口听歌,但现在许多手机都取消了音频接口,如果继续使用老款耳机听歌,则必须购买耳机转接器才可以听歌,这个耳机转接器就相当于一个适配器,在java开发中,也存在类似问题,比如说两个类不能直接交互,但是一个类又不得不调用另一个类的接口或者方法,因此我们需要中间类去适配被调用类,提供给调用者一个可用的接口,这种模式就是适配器模式。
适配器模式(Adapter)包含以下主要角色。
- 目标(Target)接口:当前系统业务所期待的接口,它可以是抽象类或接口。
- 适配者(Adaptee)类:它是被访问和适配的现存组件库中的组件接口。
- 适配器(Adapter)类:它是一个转换器,通过继承或引用适配者的对象,把适配者接口转换成目标接口,让客户按目标接口的格式访问适配者。
适配器模式分类:
类适配:类适配是指适配器通过继承适配者的方式来把适配者接口转换成目标接口

对象适配:类适配是指适配器通过组合(引用)适配者的方式来把适配者接口转换成目标接口

实例如下,使用类适配耳机和手机
//目标接口
public interface Target {
void music();
}
//适配者
public class EarPhone {
public void listen(){
System.out.println("我是耳机,连接我可以听歌了!");
}
}
//适配器
public class Adapter extends EarPhone implements Target {
@Override
public void music() {
super.listen();
}
}
public class PhoneClient {
public static void sound(Target target){
target.music();
}
public static void main(String[] args) {
//EarPhone earPhone = new EarPhone();
Adapter adapter = new Adapter();
sound(adapter);
}

使用对象适配耳机和手机
public class Adapter2 implements Target {
EarPhone earPhone;
public Adapter2(EarPhone earPhone) {
this.earPhone = earPhone;
}
@Override
public void music() {
earPhone.listen();
}
}

类适配和对象适配最大的区别在于类适配只能适配固定种类的适配者(耳机),因为java是但单继承的,而对象适配通过组合的方式(热插拔)可以适配不同类型的适配者(耳机)。

浙公网安备 33010602011771号