一、适配器模式是什么?
适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。
这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。
二、适配器模式
1.案例
- 背景:买了一个iphone
- 冲突:iphone要求电压(5V)[尊贵的5V2A]与国内插头标准输出电压(220V)不兼容
- 解决方案:设置一个适配器将插头输出的220V转变成5V
- Target
public interface Target {
//将220V转换输出5V(原有插头(Adaptee)没有的)
public int Power_5v();
}
- 源类
public class PowerPort220V {
//原有插头只能输出220V
public int output220V() {
int src = 220;
System.out.println("电压=" + src);
return src;
}
}
- 适配器类
public class Adapter extends PowerPort220V implements Target{
//期待的插头要求调用Convert_110v(),但原有插头没有
//因此适配器补充上这个方法名
//但实际上Convert_110v()只是调用原有插头的Output_220v()方法的内容
//所以适配器只是将Output_220v()作了一层封装,封装成Target可以调用的Convert_110v()而已
@Override
public int Power_5v() {
// TODO Auto-generated method stub
//获取220V电压
int srcV = output220V();
int dstV = srcV / 44 ; //转成5v
return dstV;
}
}
- 测试类
public class Test {
public static void main(String[] args) {
Target mAdapter220V = new Adapter();
System.out.println("现电压"+mAdapter220V.Convert_110v());
}
}
- 结果
命令模式的优缺点
优点
- 更好的复用性
系统需要使用现有的类,而此类的接口不符合系统的需要。那么通过适配器模式就可以让这些功能得到更好的复用。 - 透明、简单
客户端可以调用同一接口,因而对客户端来说是透明的。这样做更简单 & 更直接 - 更好的扩展性
在实现适配器功能的时候,可以调用自己开发的功能,从而自然地扩展系统的功能。 - 解耦性
将目标类和适配者类解耦,通过引入一个适配器类重用现有的适配者类,而无需修改原有代码 - 符合开放-关闭原则
同一个适配器可以把适配者类和它的子类都适配到目标接口;可以为不同的目标接口实现不同的适配器,而不需要修改待适配类
缺点
- 过多的使用适配器,会让系统非常零乱,不易整体进行把握