适配器模式:适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。
关于适配器模式的特点,这篇博客中的一句话描述的很形象:适配器模式的魅力:不改变原有接口,却还能使用新接口的功能。
适配器模式分为类适配器和对象适配器两种,本文主要学习的是对象适配器。
以听众、演说者、和翻译这一事件为例。听众只会说汉语,演说者用英语演说,此时若两者直接对话,观众将无法听懂演说者说的是什么。为了解决这一窘境,翻译出现了,它的职责就是把演说者的话翻译成观众能听懂的语言。这一情景下,说汉语就是我们的目标,说英语便是我们要转换的对象,而翻译便是达到这一目的的适配器。
具体实现:
//目标接口
public interface ISpeak {
public void speakChinese();
}
具体目标对象:
public class Audience implements ISpeak{
//听众某,只会说汉语
@Override
public void speakChinese() {
// TODO Auto-generated method stub
System.out.println("I can only speak Chinese");
}
}
适配器对象:
//翻译,将演说者的话转换成观众能听懂的语言
public class Interpreter implements ISpeak {
private ForeignSpeaker speaker;
public Interpreter(ForeignSpeaker speaker){
this.speaker=speaker;
}
@Override
public void speakChinese() {
// TODO Auto-generated method stub
speaker.speakEnglish();
}
}
被适配者:
public class ForeignSpeaker {
//演讲者,英语演说
public void speakEnglish(){
System.out.println("I speak English");
};
}
//测试
public class Test {
public static void main(String []args){
ForeignSpeaker speaker=new ForeignSpeaker();
ISpeak audience=new Interpreter(speaker);
audience.speakChinese();
}
}
输出:
由输出可见,原本说汉语的接口,达到了说英语的目的。
总而言之,适配器的目的就是在不改变现有接口的条件下,又能够使用新的接口。