设计模式五:适配器模式

来源:互联网 发布:成都中科大旗软件 编辑:程序博客网 时间:2024/05/10 03:08
定义:
将一个类的接口转换成客户希望的另外一个接口。
目标(Target)角色:定义Client使用的接口。
被适配(Adaptee)角色:这个角色有一个已存在并使用了的接口,而这个接口是需要我们适配的。
适配器(Adapter)角色:这个适配器模式的核心。它将被适配角色已有的接口转换为目标角色希望的接


分类:

类适配器模式

适配器角色对于被适配角色的适配是通过继承完成的。由于在java中不支持多重继承,而且继承有破坏封装之嫌,众多的书中(包括《设计模式》)都提倡使用组合来代替继承。

类适配器模式类图



对象适配器模式
适配器角色对于被适配角色的适配是通过组合来完成的。

对象适配器模式类图


举例:

类图



源码

/** * 测试类 */public class Test {public static void main(String[] args) {//给HTC手机充电Charger htcCharger = new HtcCharger();htcCharger.exportPower();//给N97手机充电Charger n97Charger = new N97Charger();n97Charger.exportPower();//给N98手机充电Charger n98Charger = new N98Charger();n98Charger.exportPower();}}

/** * 充电器接口 */public interface Charger {//输出电流public void exportPower();}

/** * HTC充电器 */public class HtcCharger implements Charger{@Overridepublic void exportPower() {System.out.println("HTC充电器:输出5V电压!");}}

/** * N97充电器,类的适配器模式 */public class N97Charger extends NokiaCharger implements Charger{@Overridepublic void exportPower() {if(!this.check()){this.export();System.out.println("N97手机:充电中……");}}}

/** * N98充电器,对象的适配器模式 */public class N98Charger implements Charger{private NokiaCharger nokiaCharger = new NokiaCharger();@Overridepublic void exportPower() {if(!nokiaCharger.check()){nokiaCharger.export();System.out.println("N98手机:充电中……");}}}

/** * 诺基亚充电器 */public class NokiaCharger {public boolean check(){System.out.println("诺基亚充电器:检查电池电量!");return false;}public void export(){System.out.println("诺基亚充电器:开始充电!");}}



原创粉丝点击