适配器模式的原理和应用
本文从适配器模式的概念、原理Coding和具体应用场景阐述适配器模式,对适配器模式会有一个清晰的认识。
概念
定义:将一个类的接口转换成客户期望的另一个接口
特点:使原本接口不兼容的类可以一起工作
类型:结构型
类别:
- 类适配器
- 对象适配器
适用场景:
- 已经存在的类,它的方法和需求不匹配时(方法结果相同或相似)
- 不是软件设计阶段考虑的设计模式,是随着软件维护,由于不同产品、不同厂家造成功能类似而接口不相同情况下的解决方案
优点:
- 能提高类的透明性和复用,现有的类复用但不需要改变
- 目标类和适配器类解耦,提高程序扩展性
- 符合开闭原则
缺点:
- 适配器模式编写过程需要全面考虑,可能会增加系统的复杂性
- 增加系统代码可读的难度
原理Coding
被适配者
public class Adaptee {public void adapteeRequest() {System.out.println("被适配者的方法");}
}
目标接口
public interface Target {void request();
}
适配器
- 类适配器写法:
public class Adapter extends Adaptee implements Target{@Overridepublic void request() {super.adapteeRequest();}
}
- 对象适配器写法:
public class Adapter implements Target {private Adaptee adaptee = new Adaptee();@Overridepublic void request() {adaptee.adapteeRequest();}
}
测试类
public class Test_Adapter {public static void main(String[] args) {Target concrete = new ConcreteTarget();concrete.request();Target adapterTarget = new Adapter();adapterTarget.request();}
}
Coding体会:
适配器模式使用继承或者组合的方式,实现在目标方法中调用了被适配者的方法,从而实现了方法和结果的转换。
具体应用场景
有这么一个场景:家用电都是220v,我们需要将220v的家用电通过电源适配器转换为5v。
Coding:
家用电(被适配者)
public class HousePower {public int output() {int output = 220;System.out.println("输出:220v");return output;}
}
目标接口
public interface TargetPower {int output();
}
电源适配器(适配者)
public class PowerAdapter implements TargetPower{HousePower housePower = new HousePower();@Overridepublic int output() {int output = housePower.output();output /= 44;System.out.println("转换后输出:" + output + "V");return output;}
}
测试类
public class Test_Power {public static void main(String[] args) {TargetPower targetPower = new PowerAdapter();targetPower.output();}
}
输出: