目录
一、关于适配器模式
设计模式:8、适配器模式(包装器)_适配器模式的剩余适配-CSDN博客
二、设计要求
目前有一个运行良好系统,该系统中有一个类:BookNameList。BookNameList类使用Vector存放图书名称,但为用户提供的是Vector的枚举器,用户可以使用该枚举器查看Vector中存放的图书名称。目前一个开发小组正在设计一个新的系统,根据项目的特点,该系统准备在一个NewBookNameList类中使用LinkedList存放图书名称,但为了缩短开发周期,开发小组决定将已有系统中的图书名称导入到当前新系统中。请使用适配器模式实现开发小组的目的。
三、设计实现
针对上述问题,使用适配器模式设计若干个类

1.目标
本问题中,目标接口是java.util包中的Iterator。
2.被适配者
本问题中,被适配者是java.tuil包中的Enumeration。
3.适配器
适配器实现目标 接口(Iterator),并包含被适配者的引用(Enumeration),代码如下:
java
package xyz.jangle.design.app.adapter;
import java.util.Enumeration;
import java.util.Iterator;
/**
* 适配器
* @author jangle
* @email jangle@jangle.xyz
* @time 2026年10月14日 上午7:49:02
*
*/
public class IteratorAdapter implements Iterator<String> {
private Enumeration<String> bookenum;
public IteratorAdapter(Enumeration<String> bookenum) {
super();
this.bookenum = bookenum;
}
@Override
public boolean hasNext() {
return bookenum.hasMoreElements();
}
@Override
public String next() {
return bookenum.nextElement();
}
}
四、应用程序
原系统BookNameList类:
java
package xyz.jangle.design.app.adapter;
import java.util.Enumeration;
import java.util.Vector;
/**
* 原系统
* @author jangle
* @email jangle@jangle.xyz
* @time 2026年10月14日 上午7:52:06
*
*/
public class BookNameList {
private Vector<String> vector;
// private Enumeration<?> bookenum;
public BookNameList() {
vector = new Vector<String>();
}
public void setBookName() {
vector.add("JAVA 程序设计");
vector.add("J2ME 程序设计");
vector.add("XML 程序设计");
vector.add("JSP 程序设计");
}
public Enumeration<String> getEnumeration() {
return vector.elements();
}
}
新系统NewBookNameList类:
java
package xyz.jangle.design.app.adapter;
import java.util.Iterator;
import java.util.LinkedList;
/**
* 新系统
* @author jangle
* @email jangle@jangle.xyz
* @time 2026年10月14日 上午7:56:12
*
*/
public class NewBookNameList {
private LinkedList<String> bookList;
private Iterator<String> iterator;
public NewBookNameList(Iterator<String> iterator) {
super();
this.iterator = iterator;
bookList = new LinkedList<String>();
}
public void setBookName() {
while(iterator.hasNext()) {
String name = iterator.next();
bookList.add(name);
}
}
public void getBookName() {
for(String name : bookList) {
System.out.println(name);
}
// Iterator<String> iter = bookList.iterator();
// while(iter.hasNext()) {
// System.out.println(iter.next());
// }
}
}
运行类:
java
package xyz.jangle.design.app.adapter;
import java.util.Enumeration;
/**
* 适配器模式,应用举例
* @author jangle
* @email jangle@jangle.xyz
* @time 2026年10月14日 上午8:08:41
*
*/
public class Application {
public static void main(String[] args) {
BookNameList oldBookList = new BookNameList();
oldBookList.setBookName(); // 获取图书列表
Enumeration<String> enumeration = oldBookList.getEnumeration(); // 获取图书列表的枚举器
IteratorAdapter adapter = new IteratorAdapter(enumeration); // 通过枚举器构造适配器对象
NewBookNameList newBookList = new NewBookNameList(adapter); // 使用适配器构建新系统
newBookList.setBookName(); // 通过适配器获取旧系统的图书信息
System.out.println("导入到新系统中的图书列表");
newBookList.getBookName(); // 打印新系统的图书信息
}
}
五、执行结果
