目的:
将一个类的接口转换成客户端需要的接口,适配器模式使得因接口不一致而不能使用或一起工作的类可以协作实现复用。
类图:
图1 适配器模式类型
图2 适配器模式对象型
代码
Java中不支持多继承,因此基于类的适配器模式Java中不支持。下面通过代码演示适配器模式的使用方法。
/**
角色: 目标对象(定义客户端使用的领域对象)
**/
public abstract class BasketballPractitioner{
/*
篮球从业者
*/
public void working();
public void speakEnglish();
}
/*
NBA本土球员
*/
public class NBABasketballPractitioner{
public void working(){
System.out.println("职业篮球运动员打篮球");
}
public void speakingEnglish(){
System.out.println("NBA运动员打篮球时通过英语交流战术");
}
}
/*
角色: 代理对象类
*/
public class NBABasketballTranslationer extends BasketballPractitioner {
private class CBABasketballHobbyist yaoming;
public void speakingEnglish(){
System.out.println("翻译教练的想法成中文");
yaoming.speakingChinese();
}
public void working(){
System.out.println("我的工作是指挥yaoming");
yaoming.work();
}
}
/*
角色: 被代理对象类
*/
public class CBABasketballHobbyist{
public void play(){
System.out.println("CBA篮球兴趣小组除了个姚明!!");
}
public void speakChinese(){
System.out.println("姚明目前打球说的是中文!");
}
}
/*
角色: 客户端
*/
public class BasketballCoach {
//NBA篮球教练
}
应用场景:
- 亡羊补牢的一种措施,设计出现问题时导致某个类的接口不适用,但又无法或最好不要修改时;
- 调用第三方服务时,转换接口参数。