您的位置:首页 > 其它

[设计模式]适配器模式

2012-03-14 20:23 169 查看
先举个例子说明适配器模式:

A会说英语,B会说汉语,他们彼此无法和对方交流,现在C说,我充当你们的翻译。

如果把A看做是接口,B也是接口,那么C就是一个适配器,如果它能够把A的语言转化成B想要的语言,或者把B的语言转化成A想要的语言,那么它就是单向适配器,如果它能够把他们的语言互转,那么它就是双向适配器。

下面来看下UML图:





程序员得看代码才有感觉。下面上代码:

场景:一个中国人,经常生活在中国,有一天,他出国了,带着相机去美国度假去了,准备拍些照片回来,结果悲剧了,玩到一半相机没电了,但是中国的插销没有办法插进美国的插座!!!,这时候,他得去买一个转换器(在程序中就叫做适配器)了。

咱们先写一个中国式的插座标准:

package com.design.adapter;

public interface ChinaSocket {

public void ChinaSocketInfo();

}

再来一个实现:

package com.design.adapter;

public class ChinaSocketInstance implements ChinaSocket {

public void ChinaSocketInfo() {

System.out.println("您正在使用中国插座!");

}

}

接下来写一个美国插座的标准:

package com.design.adapter;

public interface AmericaSocker {

public void AmericaSockerInfo();

}

再来一个实现:

package com.design.adapter;

public class AmericaSockerInstance implements AmericaSocker {

public void AmericaSockerInfo() {

System.out.println("您正在使用霉国插座");

}

}

现在两种插座都有了,但是就是不能用.不急,咱们自己弄一个转换器.

package com.design.adapter;

public class ChinaSocketAdapter implements ChinaSocket {

//这个地方只所以使用接口,可以在使用的时候动态地指定实现类,实现运行时多态。

private AmericaSocker americaSocker;

public void ChinaSocketInfo() {

americaSocker.AmericaSockerInfo();

}

//构造函数

public ChinaSocketAdapter(AmericaSocker americaSocker) {

this.americaSocker = americaSocker;

}

}


下面咱们测试一下能不能使用美国的插座给相机充电.

package com.design.adapter;

public class TestSockerAdapter {

/**

* 在这里,咱们就把霉国的插座变成了中国的插座,厉害吧!

* 这就是传说中的适配器模式,很简单吧!

*/

public static void main(String[] args) {

System.out.println("开始使用美国-->中国的电源转换器!");

AmericaSocker americaSocker=new AmericaSockerInstance();

ChinaSocketAdapter chinaSocketAdapter=new ChinaSocketAdapter(americaSocker);

chinaSocketAdapter.ChinaSocketInfo();

}

}

最后来看下结果,看到底充成电了没有.

开始使用美国-->中国的电源转换器!

您正在使用霉国插座

好了,大功告成!收功~!今天下午继续去拍照去!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: