设计模式之适配器模式
设计模式 Java About 2,524 words作用
使得原本由于接口不兼容而不能一起工作那些类可以一起工作。
适配器 | 类型 | 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
Views: 3,233 · Posted: 2019-12-17
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb/LiteNote扫描下方二维码关注公众号和小程序↓↓↓
Loading...