适配器模式
2015-11-14 10:41
225 查看
在学习设计模式时,看到了这篇文章,感觉还不错,很容易看懂,于是就转载下来,是用Java实现的。
这是一个 实际的例子:
假设我们要到德国去旅游,但是德国的插座和中国的插座的标准不一眼,这是电源适配器就起作用了。
这时我们有两个标准 德国标准(DB)和 中国标准(GB)
德国插座实现德国接口
德国的hotel是一个客户端,它的里头有德标的接口,可以使用德标的接口给手机充电
如果这是我去德国旅行,那么这时我就不能直接使用德国的插座为我的手机充电,这时候适配器就发挥了作用。
* 这是中国的标准:*
中国插座实现中国标准接口
下面是适配器类的实现:
现在去到德国旅游,带去的充电器是国标的
来到德国后,找到一家hotel住下,这时这家hotel的插座是德标的,
由于无法充电这时,适配器就起了作用了,我的充电器完全可以插在适配器上的,因为这是国标的适配器
再将适配器的下端插到宾馆的插座上
这时就能愉快的在hotel中充电了
这是一个 实际的例子:
假设我们要到德国去旅游,但是德国的插座和中国的插座的标准不一眼,这是电源适配器就起作用了。
这时我们有两个标准 德国标准(DB)和 中国标准(GB)
// 德国标准 public interface DBSocketInterface(){ void powerWithDBStandar(); // 利用德国的标准充电 }
德国插座实现德国接口
public class DBSocket implements DBSocketInterface(){ public void powerWithDBStandar(){ System.out.println("使用德国标准充电"); } }
德国的hotel是一个客户端,它的里头有德标的接口,可以使用德标的接口给手机充电
public class Hotel{ private DBSocketInterface dbsocket; public Hotel(){} public Hotel(DBSocketInterface dbsocket){ / this.dbsocket = dbsocket; } public void setSocket(DBSocketInterface dbsocket){ this.dbsocket = dbsocket; } public void charge(){ dbsocket.powerWithDBStandar(); // 使用德标的插口充电 } }
如果这是我去德国旅行,那么这时我就不能直接使用德国的插座为我的手机充电,这时候适配器就发挥了作用。
* 这是中国的标准:*
public interface GBSocketInterface(){ void powerWithGBStandar(); //使用国标充电 }
中国插座实现中国标准接口
public class GBSocket implements GBSocketInterface(){ public void powerWithGBstandar(){ System.out.println("使用国标充电"); } }
下面是适配器类的实现:
class SocketAdapter implements DBSocketInterface{ private GBSocketInterface gbsocket; public SocketAdapter(GBSocketInterface gbsocket){ this.gbsocket = gbsocket; } public void powerWithDBStandar(){ gbsocket.powerWithGBStandar(); } }
现在去到德国旅游,带去的充电器是国标的
GBSocketInterface gbSocket = new GBSocket();
来到德国后,找到一家hotel住下,这时这家hotel的插座是德标的,
Hotel hotel = new Hotel();
由于无法充电这时,适配器就起了作用了,我的充电器完全可以插在适配器上的,因为这是国标的适配器
SocketAdapter socketAdapter = new SocketAdapter(gbSocket);
再将适配器的下端插到宾馆的插座上
hotel.setSocket(socketAdapter)
这时就能愉快的在hotel中充电了
hotel.charge()
Note:
1. 必须符合德国标准的接口,否则的话还是没办法插到德国插座中
2. 在调用上面实现的德标接口进行充电时,提供一种机制,将这个调用转到对国标接口的调用 。
这就要求:1. 适配器必须实现原有的旧的接口
2. 适配器对象中持有对新接口的引用,当调用旧接口时,将这个调用委托给实现新接口的对象来处理,也就是在适配器对象中组合一个新接口。
相关文章推荐
- 英语单词常用前缀(1-20)
- java项目打成jar包时引用了第三方jar,此时我们该如何解决呢
- Python编写微信打飞机小游戏(七)
- android OTA更新
- 信息熵
- Git/GitLab简介和基本使用方法
- 文件被explorer.exe占用,不能完全删除
- ConnectivityManager(三)
- Linux的时间设置与同步(NTP)
- Could not create the view: An unexpected exception was thrown.问题解决
- mysql 远程root赋予创建用户权限
- 更新 Ubuntu 系统,避免报错「hash校验和不符」
- 黑马程序员_JavaSE基础知识总结二十:课堂上关于集合的几个超经典案例(结课前集合知识温故)
- Git教程
- 类之间的关系:泛化、依赖、关联、聚合、合成
- spark介绍
- 铁轨(栈)
- 手机维修技术
- 矩阵乘法的四种理解方式
- 解决VMware虚拟机无法识别U盘问题