java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台(即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se))的总称。
这篇文章主要介绍了 Java 适配器模式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
一. 概念适配器模式将一个接口转换成客户希望的另外一个接口。它使得原来由于接口不兼容而不能在一起工作的那些类可以一起工作。
二. UML三. 更加生动的例子四. 实例分析去年买了一个本本,另外给本本配了罗技 G1 光电套。坑爹的是,光电套的鼠标是 USB 接口,键盘是 PS2 接口,可我的本本却没有 PS2 接口啊。于是跑到市场,淘了一个转接器。
于是乎,我抽象了这么几个类。
1.PS2Port(PS2 接口)。
2.USBPort(USB 接口)。
3.PS2ToUSB(对象适配器),将 PS2 接口装换成 USB 接口。
4.TestAdapter(测试类),客户端。
PS2Port
- package com.bjpowernode.adapter;
- /**
- * PS2接口,圆口
- * @author eason
- *
- */
- public interface PS2Port {
- public void workWithPS2();
- }
USBPort
- package com.bjpowernode.adapter;
- /**
- * USB接口,U口
- * @author eason
- *
- */
- public interface USBPort {
- public void workWithUSB();
- }
PS2ToUSB
- package com.bjpowernode.adapter;
- /**
- * 对象适配器
- * 将PS2接口装换成USB接口
- * 所以此类类型是USB接口(implements USBPort) + 成员变量ps2Port
- * @author eason
- *
- */
- public class PS2ToUSB implements USBPort{
- private PS2Port ps2Port;
- public PS2ToUSB(PS2Port ps2Port) {
- this.ps2Port = ps2Port;
- }
- @Override
- public void workWithUSB() {
- System.out.println("转换的关键在这里,本来是");
- ps2Port.workWithPS2();
- System.out.println("经过你的转换,现在是USB工作中");
- }
- }
TestAdapter
五. 对象的适配器和类的适配器
- package com.bjpowernode.adapter;
- /**
- * 测试类
- * client
- * @author eason
- *
- */
- public class TestAdapter {
- public static void main(String[] args) {
- //我现在有一个PS2接口
- PS2Port ps2Port = new PS2Port() {
- @Override
- public void workWithPS2() {
- System.out.println("PS2工作中");
- }
- };
- //但是我需要的是一个USB接口啊,对我(client)来说,我只认识USB接口
- //经过PS2ToUSB的转换,PS2接口变成了USB接口
- USBPort ps2ToUsbPort = new PS2ToUSB(ps2Port);
- ps2ToUsbPort.workWithUSB();
- }
- }
上述的适配器就是对象适配器。再看看类适配器。
PS2ToUSB,只是简单模拟一下。因为 java 不允许多继承,所以 java 中没有类模式的代码,只有思想。
- package com.bjpowernode.adapter;
- /**
- * 类适配器
- * @author eason
- *
- */
- public class PS2ToUSB implements USBPort,
- PS2Port {
- //重写workWithUSB,把工作交给workWithPS2
- @Override public void workWithUSB() {
- workWithPS2();
- }
- }
差别就是:对象适配器实现了客户端想要的接口 (USB),在内部有一个被适配对象(PS2) 的引用,通过组合实现适配功能。类适配器实现了客户端想要的接口 (USB) 和被适配对象接口(PS2),通过继承来实现适配功能。
六. 使用场景及使用感受1. 希望复用一些现存的类,但是接口又与复用环境要求不一致。
2. 其实适配器模式有点无奈之举,在前期设计的时候,我们就不应该考虑适配器模式,而应该考虑通过重构统一接口。
七. 适配器模式与装饰者模式它们都可以用来包装对象,本质区别在于
1. 适配器模式:将一个接口转换成另外一个接口。
2. 装饰者模式:不改变接口,只加入职责。
来源: http://www.phperz.com/article/18/0105/356059.html