适配器模式是一种结构型模式
适配器模式作用:
从程序的结构上实现松耦合,可以扩大整体的类结构,用来解决更大的问题
适配器模式可以想象成一个USB网线转换器
具体的看代码比较容易理解:
先写一个网线的类:
package adapter;
//要被适配的类,网线
public class Adaptee {
public void request() {
System.out.println("连接网线,上网");
}
}
再写一个接口,接口转换器抽象实现:
package adapter;
//接口转换器的抽象实现,处理请求
public interface NetToUsb {
//把网线插到usb上
public void handleRequest();
}
实现一个接口转换器
package adapter;
//继承实现的(类实现的)
//组合(对象适配器,常用)
//真正的适配器,需要连接usb,连接网线
public class Adaptor extends Adaptee implements NetToUsb {
@Override
public void handleRequest() {
super.request(); //可以上网了
}
}
最后实现一个电脑类,通过转换器上网:
package adapter;
//客户端类,想上网,插不上网线
public class Computer {
//我们电脑需要连接上转接器才能上网
public void net(NetToUsb adaptor) {
//上网的具体实现,找一个转接器
adaptor.handleRequest();
}
public static void main(String[] args) {
//需要电脑,适配器,网线
Computer computer = new Computer(); //电脑
Adaptor adaptor = new Adaptor(); //适配器
Adaptee adaptee = new Adaptee(); //网线
computer.net(adaptor);
}
}
可以看到电脑可以上网了:
优化一下:
使用组合的方式实现网线和转换器之间的关联关系,而不是继承:
package adapter;
//组合(对象适配器,常用)
public class Adaptor2 implements NetToUsb {
private Adaptee adaptee; //网线私有了
public Adaptor2(Adaptee adaptee) {
this.adaptee = adaptee;
}
@Override
public void handleRequest() {
adaptee.request(); //可以上网了
}
}
重现实现下电脑类:
package adapter;
//客户端类,想上网,插不上网线
public class Computer {
//我们电脑需要连接上转接器才能上网
public void net(NetToUsb adaptor) {
//上网的具体实现,找一个转接器
adaptor.handleRequest();
}
public static void main(String[] args) {
//需要电脑,适配器,网线
Computer computer = new Computer(); //电脑
Adaptor adaptor = new Adaptor(); //适配器
Adaptee adaptee = new Adaptee(); //网线
//使用组合的方式
Adaptor2 adaptor2 = new Adaptor2(adaptee);
computer.net(adaptor2);
}
}
同样也能上网,这样是一遍连着网线,一边连着电脑
好了,今天先到这里~