设计模式五:适配器模式
定义:
将一个类的接口转换成客户希望的另外一个接口。
目标(Target)角色:定义Client使用的接口。
被适配(Adaptee)角色:这个角色有一个已存在并使用了的接口,而这个接口是需要我们适配的。
适配器(Adapter)角色:这个适配器模式的核心。它将被适配角色已有的接口转换为目标角色希望的接
分类:
类适配器模式
适配器角色对于被适配角色的适配是通过继承完成的。由于在java中不支持多重继承,而且继承有破坏封装之嫌,众多的书中(包括《设计模式》)都提倡使用组合来代替继承。
类适配器模式类图
对象适配器模式
适配器角色对于被适配角色的适配是通过组合来完成的。
对象适配器模式类图
举例:
类图
源码
[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();
}
}
[java]
/**
* 充电器接口
*/
public interface Charger {
//输出电流
public void exportPower();
}
[java]
/**
* HTC充电器
*/
public class HtcCharger implements Charger{
@Override
public void exportPower() {
System.out.println("HTC充电器:输出5V电压!");
}
}
[java]
/**
* N97充电器,类的适配器模式
*/
public class N97Charger extends NokiaCharger implements Charger{
@Override
public void exportPower() {
if(!this.check()){
this.export();
System.out.println("N97手机:充电中……");
}
}
}
[java]
/**
* N98充电器,对象的适配器模式
*/
public class N98Charger implements Charger{
private NokiaCharger nokiaCharger = new NokiaCharger();
@Override
public void exportPower() {
if(!nokiaCharger.check()){
nokiaCharger.export();
System.out.println("N98手机:充电中……");
}
}
}
[java]
/**
* 诺基亚充电器
*/
public class NokiaCharger {
public boolean check(){
System.out.println("诺基亚充电器:检查电池电量!");
return false;
}
public void export(){
System.out.println("诺基亚充电器:开始充电!");
}
}
补充:软件开发 , Java ,