> 文章列表 > 适配器模式的原理和应用

适配器模式的原理和应用

适配器模式的原理和应用

本文从适配器模式的概念、原理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();}
}

输出: