设计模式之适配器模式
设计模式 Java 大约 2524 字作用
使得原本由于接口不兼容而不能一起工作那些类可以一起工作。
适配器 | 类型 | src形式 | 关系 |
---|---|---|---|
类适配器 | 以类给到 | 在Adapter里,将src当作类 | 继承 |
对象适配器 | 以对象给到 | 在Adapter里,将src当作对象 | 持有(聚合) |
接口适配器 | 以接口给到 | 在Adapter里,将src当作接口 | 实现 |
案例
类适配器
通过继承src类,实现dst接口,完成src->dst的适配
phone.charging(new VoltageAdapter());
public class Phone {
public void charging(IVoltage5V iVoltage5V) {
if (iVoltage5V.output5V() == 5) {
System.out.println("可以充电");
}
}
}
/**
* VoltageAdapter是适配器类
*/
public class VoltageAdapter extends Voltage220V implements IVoltage5V {
@Override
public int output5V() {
int srcV = output220V();
int dstV = srcV / 44;
return dstV;
}
}
/**
* Voltage220V是被适配的类
*/
public class Voltage220V {
public int output220V() {
return 220;
}
}
/**
* IVoltage5V是适配接口
*/
public interface IVoltage5V {
int output5V();
}
对象适配器
对象适配器和类适配器是同一种思想,使用组合关系代替了继承,解决了类适配器必须继承src的局限性,也不再要求dst必须是接口。
phone.charging(new VoltageAdapter(new Voltage220V()));
public class Phone {
public void charging(IVoltage5V iVoltage5V) {
if (iVoltage5V.output5V() == 5) {
System.out.println("可以充电");
}
}
}
/**
* 对象适配器
*/
public class VoltageAdapter implements IVoltage5V {
private Voltage220V voltage220V;
public VoltageAdapter(Voltage220V voltage220V) {
this.voltage220V = voltage220V;
}
@Override
public int output5V() {
int srcV = voltage220V.output220V();
int dstV = srcV / 44;
return dstV;
}
}
/**
* Voltage220V是被适配的类
*/
public class Voltage220V {
public int output220V() {
return 220;
}
}
/**
* IVoltage5V是适配接口
*/
public interface IVoltage5V {
int output5V();
}
接口适配器
将Interface1的方法进行默认实现,实现method1、method2、method3。
用到哪些方法就只需复写该方法即可。
AbstractAdapter abstractAdapter = new AbstractAdapter() {
//只需要复写想用的方法即可
@Override
public void method1() {
System.out.println("复写后的method1");
}
};
abstractAdapter.method1();
/**
* 接口适配器
*/
public abstract class AbstractAdapter implements Interface1 {
@Override
public void method1() {
}
@Override
public void method2() {
}
@Override
public void method3() {
}
}
public interface Interface1 {
void method1();
void method2();
void method3();
}
源码
Netty中的实现类ChannelInboundHandlerAdapter
继承了抽象类ChannelHandlerAdapter
实现了ChannelHandler
接口。
io.netty.channel.ChannelHandler
io.netty.channel.ChannelHandlerAdapter
io.netty.channel.ChannelInboundHandlerAdapter
阅读 2552 · 发布于 2019-12-17
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb扫描下方二维码关注公众号和小程序↓↓↓

昵称:
随便看看
换一批
-
Nginx 配置之解决 413 错误(Request Entity Too Large)阅读 5358
-
Java 并发编程之 AQS ReentrantLock 公平锁源码解析阅读 1360
-
Prometheus+Grafana+nginx-prometheus-exporter 监控 Nginx阅读 2927
-
使用 LuaRocks 管理 Lua 依赖阅读 3287
-
minikube 与本地机器之间传递文件阅读 357
-
Linux 使用 dd 查看日志增长速度、方法每秒执行次数阅读 647
-
PowerShell 使用 wget 只输出信息不下载问题阅读 3582
-
走进 Rust:枚举阅读 2033
-
minikube 导入本地 Docker 镜像阅读 533
-
算法:快速排序阅读 1308