Java设计模式--适配器模式
原文网址:Java设计模式—适配器模式_IT利刃出鞘的博客-CSDN博客
其他网址
【狂神说Java】通俗易懂的23种设计模式教学(停更)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
简介
生活实例
电脑没有网线接口,或者网线接口坏了。此时,可以用一个转接器,将网线转为USB。
代码(初版)
所有的类
被适配的类
本处是网线。有一个请求方法:连接网线上网。
package org.example.adaptor;
public class Cable {
public void request() {
System.out.println("通过网线上网");
}
}
适配器类
接口
package org.example.adaptor;
public interface Adapter {
public void handleRequest();
}
实现类
package org.example.adaptor;
public class CableToUSB extends Cable implements Adapter{
@Override
public void handleRequest() {
super.request();
}
}
客户端类
本处是电脑。想上网,却不能直接插网线。
要是能插网线,直接这样即可:
package org.example.adaptor;
public class Computer {
public static void surfTheInternet(Cable cable) {
cable.request();
}
public static void main(String[] args) {
Cable cable = new Cable();
surfTheInternet(cable);
}
}
不能插网线,所以,我们要插上适配器
package org.example.adaptor;
public class Computer {
public static void surfTheInternet(Adapter adapter) {
adapter.handleRequest();
}
public static void main(String[] args) {
Adapter adapter = new CableToUSB();
surfTheInternet(adapter);
}
}
测试
执行结果
通过网线上网
代码(优化版)
优化后的所有的类
上边的适配器用了继承的方法,而java只能继承一个对象,也就是说,它只能适配网线。此时若有多个要适配的东西,那不完蛋了?
将被适配的类抽象
接口
package org.example.adaptor;
public interface Adaptee {
public void request();
}
实现类
package org.example.adaptor;
public class Cable implements Adaptee{
public void request() {
System.out.println("通过网线上网");
}
}
适配器组合而不是继承
package org.example.adaptor;
public class CableToUSB implements Adapter{
private Adaptee adaptee;
public CableToUSB(Adaptee adaptee) {
this.adaptee = adaptee;
}
@Override
public void handleRequest() {
adaptee.request();
}
}
测试
package org.example.adaptor;
public class Computer {
public static void surfTheInternet(Adapter adapter) {
adapter.handleRequest();
}
public static void main(String[] args) {
Adaptee adaptee = new Cable();
Adapter adapter = new CableToUSB(adaptee);
surfTheInternet(adapter);
}
}
执行结果
通过网线上网
还没有评论,来说两句吧...