Ghost只会说英文,但是现在要跟我用中文交谈,因此他需要随身携带一个翻译,通过翻译才能与我进行有效沟通。
明确上述要求中的一点:即Ghost说话的方法为英文,而我接收的方法为中文,因此我们之间必须有个能转化英文为中文的接口,这就是适配器的概念。
首先我们定义EnglishSpeaker和ChineseSpeaker接口:
interface EnglishSpeaker{
public String speakEnglish();
}
interface ChineseSpeaker{
public void speakChinese();
}
然后定义外国人和翻译类——Ghost和Translater
class Ghostt implements EnglishSpeaker{
@Override
public String speakEnglish() {
return "I speak English";
}
}
class Translater implements ChineseSpeaker{
private EnglishSpeaker englishSpeaker = null;
public Translater(EnglishSpeaker englishSpeaker) {
this.englishSpeaker = englishSpeaker;
}
private String translater(String eng){
return "I speak Chinese";
}
@Override
public void speakChinese() {
System.out.println(
translater(this.englishSpeaker.speakEnglish()));
}
}
让Translater拥有Ghost的引用,同时,将自己的说话方法定义为所需的speakChinese
,这样就可将任何一个EnglishSpeaker的对象说的话进行翻译了。
在客户端,Translater可以这么用:
public static void main(String[] args){
EnglishSpeaker engMan = new Ghostt();
Translater translater = new Translater(engMan);
translater.speakChinese();
}
I speak Chinese
适配器模式是在适配双方都不便于修改的情况下所使用的。Adapter将Adaptee的方法包装到自身的复合要求接口规范的另一个方法中,从而能够适应所需接口的要求。
看上去适配器模式
跟 代理模式很类似,但仔细观察会发现,代理模式是为了“偷梁换柱”,表面上跟被代理者一模一样,但其实内在的已经改变;适配器模式是在知道适配双方无法达成一致的情况下,进行的一个适配过程,当然,在这个适配过程中,还是可以改变适配双方的行为的,但是它所关注的点显然不是像代理模式那样“偷偷摸摸”,而是“光明正大”。再者,适配双方所做的事情一定是要相似或者一致,才能方便的使用适配器模式。
原文地址:http://blog.csdn.net/langduhualangdu/article/details/44132579