博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[设计模式]适配器模式
阅读量:6256 次
发布时间:2019-06-22

本文共 1755 字,大约阅读时间需要 5 分钟。

先举个例子说明适配器模式:

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();
}
}

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

开始使用美国-->中国的电源转换器!
您正在使用霉国插座

好了,大功告成!收功~!今天下午继续去拍照去!

转载于:https://www.cnblogs.com/yudy/archive/2012/03/14/2396529.html

你可能感兴趣的文章
windows主机mysql忘记密码如何重置
查看>>
Learn Python 010: Dictionary - Cinema Simulator
查看>>
转载——c++中冒号(:)和双冒号(::)的用法
查看>>
使用CSS3改变文本选中的默认颜色
查看>>
【leetcode】560. Subarray Sum Equals K
查看>>
使printf打印信息带有颜色
查看>>
Linux中磁盘分区——理论篇
查看>>
看博客学学Android(七)
查看>>
19.05.02--存储二进制数据
查看>>
linux输出与查看的几种方式
查看>>
HDU - 3516 Tree Construction
查看>>
Bind安装配置及应用
查看>>
滚动数组+离线 优化
查看>>
合并两个有序数组的golang实现
查看>>
单元测试 模块接口测试
查看>>
洛谷P3371【模板】单源最短路径
查看>>
dedecms---一个简单酷站的构建及解析
查看>>
初识nodeJS
查看>>
HTTP协议
查看>>
3.2 Multi-Master Replication
查看>>