码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式——适配器模式

时间:2015-03-08 14:17:25      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:设计模式   适配器   

场景设置

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!