1.适配器模式 --Adapter
简单介绍下适配器模式
什么是适配器模式
简单来说,就是当两个类难以互通的时候,我们为了避免重新写某个类,而在他们之中加入一个类似于翻译官的职务–适配器。从而使得双方的类都不用重新编写,大大提高了维护效率和新版本迭代效率。
我们用生活中的例子来解释下吧,如下图:
我们常用的电脑和网线之间就是一个例子,随着笔记本电脑的不断变薄,网线已经很难接进笔记本里了,此时就需要一个适配器(usb)起到中间商的作用。使得既不用更改笔记本电脑,也不用更改网线,电脑也能正常上网。
(对适配器的抽象类的理解:因为电脑和网线接口有很多种,单一个适配器类肯定是不够的,于是就需要一个抽象接口来不断创建不同的适配器类)
我们尝试用代码实现
1.1类适配器实现
- Adaptee 网线类
package Adapter;
//网线类(第一个类)
public class Adaptee {
public void request() {
System.out.println("连接上网");
}
}
- computer 两类之一
package Adapter;
public class Computer {
//直接把适配器添加进去用适配器调用网线,从而上网
public void net(netusb usb) {
usb.haldlerequest();
}
}
- netusb 接口类
package Adapter;
public interface netusb {
//提供个接口,给以后的适配器搭个框架
public void haldlerequest();
}
- Aadapter 适配器类
package Adapter;
//实际上的适配器
//继承了网线,又实现了接口抽象类的规范
public class Aadapter extends Adaptee implements netusb{
@Override
public void haldlerequest() {
super.request();
}
}
- 测试类
package Adapter;
public class test {
public static void main(String[] args) {
Computer computer = new Computer();
Aadapter aadapter = new Aadapter();
computer.net(aadapter);
}
}
连接成功!
1.2组合法(对象适配器)
现在这种方法虽说解决了我们的问题,但是存在缺陷。
一种适配器如果直接继承两个类中的一个,就减少了很多适配器的通用性,而且java不支持多继承,一个适配器就没办法适应两种网线。
于是,另一种方法诞生了------用组合法实现(对象适配器)
改动的类
- Aadapter
package Adapter;
//实际上的适配器
//继承了网线,又实现了接口抽象类的规范
public class Aadapter implements netusb{
private Adaptee adaptee;
@Override
public void haldlerequest() {
adaptee.request();
}
public void setAdaptee(Adaptee adaptee) {
this.adaptee = adaptee;
}
}
测试
package Adapter;
public class test {
public static void main(String[] args) {
Computer computer = new Computer();
Adaptee adaptee = new Adaptee();
Aadapter aadapter = new Aadapter();
aadapter.setAdaptee(adaptee);
computer.net(aadapter);
}
}
连接成功!