标签:style blog http color 使用 strong ar 数据 2014
1、意图:
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
2、场景描述:
手机的Usb数据线可以被看做适配器,不同类型的手机通过不同的Usb数据线连接到电脑相同的usb接口上。几年前的非智能手机,数据线连接手机的一端由于手机品牌的不同使用了各式各样的接口,但是连接电脑的一端却采用了相同usb接口。针对特定品牌的数据线使得每种不同的手机都可以连接到电脑的usb接口上,使得手机接口可以与电脑的usb接口协同工作。
另外,C++中的栈(stack)、队列(queue)被称作容器适配器,它们本身都是基于线性表来实现的,但是对外提供了特定的操作接口,如stack的LIFO(last-in first-out)特性。
3、适配器模式类图:
对象适配器类图:
角色:
协作:
注:
4、适用性:
5、实例类图:
说明:
6、代码实例:
手机端口类,含有手机端口的信息,对应适配器模式中的Adaptee。
1 package com.crazysnail.adapter; 2 3 public class PhonePort { 4 public void getPhonePort(){ 5 System.out.println("我是一个手机接口"); 6 } 7 }
Usb端口类,满足将设备连接到电脑的新需求,对应适配器模式中的Target。
1 package com.crazysnail.adapter; 2 3 public class UsbPort { 4 public void getUsbPort(){ 5 System.out.println("我是一个usb接口"); 6 } 7 }
数据线类,一端连接到手机端口,开放数据线另一端的usb接口,对应适配器模式中的Adapter。
1 package com.crazysnail.adapter; 2 3 public class UsbDataLine extends UsbPort{ 4 private PhonePort phonePort; 5 6 public UsbDataLine() { 7 System.out.println("获取一条匹配特性型号手机的数据线"); 8 phonePort = new PhonePort(); 9 } 10 11 @Override 12 public void getUsbPort(){ 13 phonePort.getPhonePort(); 14 System.out.println("手机接口连接到数据线一端,开放数据线的usb接口一端"); 15 } 16 }
人类类,有连接手机到电脑的需求,使用数据线将手机连接到电脑,对应适配器模式中的Client。
1 package com.crazysnail.adapter; 2 3 public class Human { 4 public static void linkPhoneToComputer(UsbDataLine line){ 5 line.getUsbPort(); 6 System.out.println("将Usb接口连接到电脑"); 7 } 8 }
测试类,效果演示。
1 package com.crazysnail.adapter; 2 3 public class AdapterTest { 4 public static void main(String[] args){ 5 UsbDataLine newUsbDataLine = new UsbDataLine(); 6 7 Human.linkPhoneToComputer(newUsbDataLine); 8 } 9 }
效果图:
7、适配器模式的特点
标签:style blog http color 使用 strong ar 数据 2014
原文地址:http://www.cnblogs.com/-crazysnail/p/3949480.html