一 为什么有适配器(根本原因:事情不是一个独立单元做的)
- 假如在现实社会中你是一个工人,需要做一个鼠标,然后你又需要做一个主板,这个时候如果需要再做个鼠标与主板的适配接口的话,老板绝对会找你pk的。
- 所有的适配器应该出现的地方都是在事情不是一个独立单元设计的,而这个时候要进行对接(例如:ps2的鼠标要插上电脑主板,对电脑的功能进行调用),这个时候才会需要一个适配器。
- 有时候把所有东西拆分开来都可以看到适配器的影子,比如手机充电=220电源+充电头+充电线+手机,这样充电头和充电线就都是适配器了。我们这里的独立单元就是看事情的角度了!
二 适配器的特点
2.1,不能独立使用,必须配合两个端来使用
2.2,解耦
例如;充电头+数据线+手机 把不同的独立的功能都提取出来
2.3,复用性
数据线还可以当充电线使,当然还可以更换单个部件
2. 4,局限性
比如充电线只有充电的功能没有数据传输的功能,但是手机和电脑都有数据传输的功能
三 适配器怎么用
3.1,类适配器
直接上代码
// 电脑usb服务 被适配者
class ComputerUSB {
public void 充电() {
System.out.println("充电");
}
public void 数据传输() {
System.out.println("数据传输");
}
public void 音乐输出() {
System.out.println("音乐输出");
}
public void 音乐输入() {
System.out.println("音乐输入");
}
}
//手机数线线
interface PhoneDataLine {
void 充电数据传输();
}
//客户端普通实现类
class PhoneDataLineImpl implements PhoneDataLine {
@Override
public void 充电数据传输() {
System.out.println("做梦吧,拿什么传");
}
}
//适配器
class Adaptor extends ComputerUSB implements PhoneDataLine {
@Override
public void 充电数据传输() {
数据传输();
充电();
}
}
//客户端
public static void main(String[] args) {
//普通的接口实现,功能无法使用
PhoneDataLine dataLine = new PhoneDataLineImpl();
dataLine.充电数据传输();
System.out.println("=================可爱的分割线====================");
// 适配电脑的接口实现,可以使用功能
PhoneDataLine phoneDataLine = new Adaptor();
phoneDataLine.充电数据传输();
}
// output
做梦吧,拿什么传
=================可爱的分割线====================
数据传输
特点
直接继承
3.2 ,使用对象适配
只需要更改适配器的代码就可以了
class Adaptor implements PhoneDataLine {
private ComputerUSB computerUSB = new ComputerUSB();
@Override
public void 充电数据传输() {
computerUSB.数据传输();
computerUSB.充电();
}
}
3.3 缺省适配器
interface BadPersion {
void 抽烟();
void 喝酒();
void 赌博();
void 嫖娼();
}
abstract class BadpersionAdaptor implements BadPersion {
@Override
public void 抽烟() {
}
@Override
public void 喝酒() {
}
@Override
public void 赌博() {
}
@Override
public void 嫖娼() {
}
}
class 周恩来 extends BadpersionAdaptor{
@Override
public void 抽烟() {
super.抽烟();
}
}
四 小结
三种适配器的相同点和不同点
4.1 相同点
实现了接口,对方法进行了处理
类适配器和对象适配器,都引入了被适配者
4.2 不同点
1,缺省适配器不用引入被适配者
2,类适配器需要继承类,只能适配一个,可以重写被适配者的方法
3,对象适配器可以适配多个(更灵活一点)
4,缺省适配器一般也是抽象类
五 最佳实践
springmvc中的适配器,叫做 handlerAdaptor,这个适配器有很多实现,用户只需要根据自己的需要找到合适的适配器。
问题
如果把类适配器和对象适配器组合起来,请问这个叫什么适配器
本猿菜猿一个,如果有不对的地方,请指出来,本猿会非常乐意接受批评!!