适配器模式

一、完成者信息

姓名:周智

学号:07770108

 

二、模式名称

适配器模式

 

三、模式介绍

定义:

在计算机编程中,适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。

分类:

  • 对象适配器模式 - 在这种适配器模式中,适配器容纳一个它我包裹的类的实例。在这种情况下,适配器调用被包裹对象的物理实体(一般为组合)。   
  • 类适配器模式 - 这种适配器模式下,适配器继承自已实现的类(一般多重继承)。

 

四、问题提出

问题描述

笔记本只提供USB卡接口,不提供手机存储卡接口,用手机拍的照片不能传到电脑中去,怎样能将手机存储卡中的照片传到电脑中去呢?

问题代码模型

 

问题代码模型
1 Interface IUSBCard //正常USB卡接口
2  {
3 Byte[] ReadUSBFile(); //读取usb卡中的文件数据

4  }
5

6 Class USBCard:IUSBCard //usb卡,实现对应接口
7  {
8
Public Byte[] ReadUSBFile()
9
{
10
Return fileData;
11
}
12 Private byte[] fileData; //USBCard中的数据

13  }
14

15
16 Interface IMobileCard //手机卡接口
17  {
18 Byte[] ReadMobileFile(); //读取手机卡中的文件数据

19  }
20 Class MobileCard:IMobileCard //手机卡,实现手机卡接口

21  {
22 Public byte
[] ReadMobileFile()
23
{
24
Return fileData;
25
}
26 Private byte
[] fileData;
27
}
28

29
30
31 Class Computer //笔记本电脑
32  {
33 Public byte[] GetOutterFile(IUSBCard usbCard) //读取外部文件数据

34   {
35 Return UsbCard.ReadUSBFile(); //读取USB卡中的文件数据

36 }
37
}
38

39 运行:
40 USBCard usbCard=new USBCard(); //正常USB卡

41 MobileCard mobileCard=new MobileCarrd(); //手机内存卡
42
43 Computer com=new Computer(); //笔记本电脑
44
45 Byte[] file=com.GetOutterFile(usbCard); //将usb卡插在笔记本电脑上,读取usb卡中的文件数据
46 Byte[] file1=com.GetOutterFile(mobileCard); //读取手机内存卡中的文件数据
47

48 //结果:最后一行出错
49

 

 

五、不假思索的解决方案

方法:

通过第三方设备将手机卡中的数据转移到usb卡中。

缺点:

     没有从根本上解决问题。

 

六、采用适配器模式的解决方案

解决方法:

生产一个中间件,能将电脑接口和手机卡接口相适应。

图形解释:

代码模型:

 

采用适配器模式的解决方案代码模型
1 Class CardAdapter:IUSBCard //中间件,适配器
2 {
3 Public CardAdapter(IMobileCard imobile)
4 {
5 imobileCard=imobile;
6 }
7
8 Public byte[] ReadUSBFile()
9 {
10 Return imobileCard.ReadMobileFile();
11 }
12
13 Private ImobileCard imobileCard;
14 }
15
16 Computer com=new Computer(); //笔记本电脑
17 MobileCard mobileCard=new MobileCard(); //手机卡
18 CardAdapter cardAdapter=new CardAdapter(mobileCard); //中间件,适配器
19
20 Byte[] file=com.GetOutterFile(cardAdapter); //间接读取手机卡中的数据
21

 

类图:

七、总结

适配器模式真好啊!

posted @ 2010-11-25 16:21  天津城建学院软件工程  阅读(590)  评论(0编辑  收藏  举报