源代码
GitHub源代码
1.本文目标
本文目标是为了让大家认识并理解适配器模式
2.基本套路
定义:将一个类的接口转换成客户期望的另一个接口
类型:结构型
选择关键点:定制适配器的选择关键点在于是否有更加优良的替代方案,缺省适配器的选择关键点在于接口中的方法是否可以不全部提供,且都有缺省方案
设计原则:遵循开闭原则、体现功能复用
使用概率:40%
难度系数:中
3.适用场景
1.已经存在的类,它的方法和需求不匹配时(方法结果相同或相似)
2.不是软件设计阶段考虑的设计模式,是随着软件维护,由于不同产品,不同厂家造成功能类似而接口不相同情况下的解决方案
4.使用步骤
1.需要4个角色,被适配者,适配者,目标接口,目标接口的实现类(这个实现类可以有也可以没有,看具体业务)
2.目的就是让适配者通过他的一顿操作,达到融合被适配者和目标接口到一个类中
5.举个栗子
我们用具体的代码去更好的理解这个设计模式
5.1栗子说明
- 背景:把220V的电压通过手机充电器转换成5V的电压给手机进行充电
- 目的:通过适配器模式去进行一个转换
5.2使用步骤
实现代码如下:
步骤1.创建被适配者(220V的电压类)
public class AC220 {
public int outputAC220V(){
int output = 220;
System.out.println("输出交流电"+output+"V");
return output;
}
}
步骤2.创建目标接口(DC5)
public interface DC5 {
int outputDC5V();
}
步骤3.创建适配器(PowerAdapter)
public class PowerAdapter implements DC5 {
private AC220 ac220=new AC220();
@Override
public int outputDC5V() {
int adapterInput = ac220.outputAC220V();
//模拟变压器
int adapterOutput = adapterInput/44;
System.out.println("使用PowerAdapter输入AC:"+adapterInput+"V"+"输出DC:"+adapterOutput+"V");
return adapterOutput;
}
}
步骤4. 测试
public static void main(String[] args) {
DC5 dc5 = new PowerAdapter();
dc5.outputDC5V();
}
6.优点
- 能提高类的透明性和复用,现有的类复用但不需要改变
- 目标类和适配器类解耦,提高程序扩展性
- 符合开闭原则
7.缺点
- 适配器编写过程要全面考虑,可能会增加系统的复杂性
- 增加系统代码可读的难度
8.总结
本文只是对适配器模式进行一个分享,接下来会从创建型模式,结构型模式,行为型模式,这三大类展开一个系列分享,大家可以持续进行关注,信仰年輕的设计模式,蟹蟹啦。
网友评论