Design Pattern: Adapter 模式 - Object Adapter
来源:互联网 发布:linux vsftpd chcon 编辑:程序博客网 时间:2024/05/22 02:19
学习是分享和合作式的!
转载请注明出处:http://blog.csdn.net/wdzxl198/article/details/9344903;
文章摘自: http://www.riabook.cn/doc/designpattern/;
的电脑是个旧电脑,新的滑鼠都在使用USB接口了,而您的电脑上并没有USB,而只有一个PS2接口,这时您可以使用一个USB转PS2的接头作为转换,这样您的电脑就可以使用新滑鼠了(当然您也可以使用USB扩充卡,意思是相同的)。
类似的概念,有时候您想在原来的程式中加入一个外部元件,例如一个类别,但是这个类别与您目前所设计的程式在介面上并不一致,为了让这个外部类与原程式的介面一致,您必须使用一个类别作为中介来配接它们,这时您可以采用Adapter模式。
举个例子来说,在Java 1.0中有个Enumeration,您在这个版本发行之后,使用它来设计了一个MessageApplication,例如:
- MessageApplication.java
import java.util.*;public class MessageApplication { public void showAllMessage(Enumeration enum) { Object msg; while(enum.hasMoreElements()) { msg = enum.nextElement(); System.out.println(msg); } } }
您的客户端程式是这么使用MessageApplication的:
- MessageClient.java
import java.util.*;public class MessageClient { private MessageApplication msgApp; public void run() { Vector vector = new Vector(); for(int i = 0; i < 10; i++) vector.addElement("物件 " + i); msgApp = new MessageApplication(); msgApp.showAllMessage(vector.elements()); } public static void main(String[] args) { MessageClient msgClient = new MessageClient(); msgClient.run(); }}
现在Java 1.2中新增了Iterator,您想要使用它的功能,但基本上您不想更动原来程式中已设计好的MessageApplication类别,这时候您可以 使用Adapter模式,将Iterator的介面转换为Enumeration相容,例如:
- IteratorAdapter.java
import java.util.*;public class IteratorAdapter implements Enumeration { private Iterator iterator; IteratorAdapter(Iterator iterator) { this.iterator = iterator; } // 转接介面 public boolean hasMoreElements() { return iterator.hasNext(); } public Object nextElement() throws NoSuchElementException { return iterator.next(); } }
您可以在客户端程式中照样使用MessageApplication类别,而不用作任何的变动:
- MessageClient.java
import java.util.*;public class MessageClient { // We could still use MessageApplication private Enumeration iteratorAdapter; public void run() { List arrayList = new ArrayList(); for(int i = 0; i < 10; i++) arrayList.add("物件 " + i); iteratorAdapter = new IteratorAdapter(arrayList.iterator()); // We could still use MessageApplication MessageApplication msgApp = new MessageApplication(); msgApp.showAllMessage(iteratorAdapter); } public static void main(String[] args) { MessageClient msgClient = new MessageClient(); msgClient.run(); }}
如程式所示的,透过Adapter模式,您原有程式中已设计好的类别不用更动,就可以引进新类别的功能,将上面的程式UML类别结构画出如下:
上面的作法,是将要引进的新类别当作Adapter类别的一个物件成员,这是IbObject Adapter模式,其抽象结构如下:
Edit by Atlas,
Time:15:34
- Design Pattern: Adapter 模式 - Object Adapter
- Design Pattern: Adapter 模式 - Class Adapter
- Design Pattern: Default Adapter 模式
- Adapter 模式 - Object Adapter
- Adapter 模式 - Object Adapter
- Design Pattern 11-Adapter
- C++ Design Pattern:Adapter
- [Design Pattern]:Adapter
- design pattern : Adapter
- design pattern - Adapter
- Design Pattern--Adapter
- Java design pattern: Adapter
- 一句话Design Pattern:Adapter
- Design Pattern - Structural Pattern - Adapter
- Design Pattern(6)-Adapter Pattern
- Design Pattern 6: Adapter Pattern
- 设计模式学习—适配器模式(Adapter Design Pattern)
- Design Pattern - Adapter(C#)
- mysql修改用户权限
- 动态改变ImageButton背景图片
- wince下全屏截图并保存为bmp格式
- Java 读取文件,返回文件内容为空
- uva10252 Common Permutation
- Design Pattern: Adapter 模式 - Object Adapter
- 本人简介:
- 常见排序算法稳定性分析
- 关于计算机的进制转换方法
- 寒门难再出贵子
- 三角形图形算法
- 差分约束系统详解
- Search in Rotated Sorted Array II
- 【JSP--@include与jsp:include的区别】