场景:有一些业务接口,客户端想要调用,但是接口没有直接暴露,这时候可以定义一个目标接口提供给客户端,同时,使用一些实现类来分别调用目标接口。 这样,客户端只需要调用一个接口方法(指定不同的实现)就能访问业务接口了。
角色:
适配者(Adaptee)类: 客户端想要访问的真实业务接口
目标(Target)接口: 提供给客户端访问的接口或抽象类
适配器(Adapter)类: 目标接口的实现,其可以注入具体的适配者(继承也行),这样就可以调用具体的适配者方法了
过程:
现在有两个适配者
//适配者1:电能发动机 class ElectricMotor { public void electricDrive() { System.out.println("电能发动机驱动汽车!"); } }
//适配者2:光能发动机 class OpticalMotor { public void opticalDrive() { System.out.println("光能发动机驱动汽车!"); } }
调用者不能直接访问到适配者,这时候定义一个目标接口给调用者访问
//目标:发动机 interface Motor { public void drive(); }
定义两个适配器实现目标接口,去适配不同的适配者
//电能适配器 class ElectricAdapter implements Motor { private ElectricMotor emotor; public ElectricAdapter() { emotor = new ElectricMotor(); //注入电能适配者 } public void drive() { emotor.electricDrive(); } } //光能适配器 class OpticalAdapter implements Motor { private OpticalMotor omotor; public OpticalAdapter() { omotor = new OpticalMotor(); //注入光能适配者 } public void drive() { omotor.opticalDrive(); }
调用者此时就可以指定不同的实现,通过Motor的drive方法访问到适配者了。