本设计模式资料源于慕课网,讲师:Geely 《Java设计模式精讲 Debug方式+内存分析》,本人作为自己手打整理作为学习的归纳总结。
一,模式介绍
1,定义和介绍
- 定义:将一个类的接口转化成客户需要的另外一个接口
- 使原本接口不兼容的类可以一起工作
- 类型:介绍
2,适用场景
- 已经存在的类,它的方法和需求不匹配的时候时(方法结果相同或类似)
- 不是软件设计阶段考虑的设计模式,是随着软件维护,由于不同产品,不同厂家造成功能类似而接口不相同的情况下的解决方案
3,优点
- 能提高类的透明性和复用,现有的类复用但不需要改变
- 目标类和适配器类解耦,提高程序扩展性
- 符合开闭原则
4,缺点
- 适配器编写过程需要全面考虑,可能会增加系统的复杂性
- 增加系统代码可读的难度
二,代码演示
这里是要得到的目标接口
package com.try1.design.structural.adapter.object_classadapter;
public interface Target {
public void request();
}
直接实现的类
package com.try1.design.structural.adapter.object_classadapter;
public class ConcreteTarget implements Target {
@Override
public void request() {
System.out.println("实现直接继承方法");
}
}
需要进行改变的方法
package com.try1.design.structural.adapter.object_classadapter;
public class Adaptee{
public void AdapteeRequest(){
System.out.println("要适配的方法");
}
}
适配器通过继承和实现来使得适配的方法满足目标接口
值得注意的是这里运用了继承或者是在类里面new一个的两种方法。
package com.try1.design.structural.adapter.object_classadapter;
public class Adapter extends Adaptee implements Target {
//对象适配器的方法则是不用继承,直接在适配器类,new一个相关的类
// private Adaptee adaptee=new Adaptee();
@Override
public void request() {
//实行适配前的操作
super.AdapteeRequest();
//进行适配后的操作
//对象适配器的操作和上方类似
// adaptee.AdapteeRequest();
}
}
下面是一个实际例子
- 业务场景
需要将220v的交流电转化成5v的直流电
package com.try1.design.structural.adapter.power;
public interface DC5 {
public int create5V();
}
package com.try1.design.structural.adapter.power;
public class AC220 {
public int create220V(){
return 220;
}
}
package com.try1.design.structural.adapter.power;
public class PowerAdapter extends AC220 implements DC5 {
@Override
public int create5V() {
return super.create220V()/44;
}
}
package com.try1.design.structural.adapter.power;
public class Test {
public static void main(String[] args) {
DC5 dc5=new PowerAdapter();
System.out.println(dc5.create5V());
}
}
三,总结
适配器设计模式,给我的第一感觉也是电源适配器这样的感觉,将一个原本不符合要求的接口,跟另外一个类进行改造,最终生产出我们需要的接口。
不过,确实这种适配器的方法还是少用,不同于其他设计模式,这种设计模式有点想亡羊补牢的既视感。