目录
一、关于适配器模式
二、设计要求
三、设计实现
1.目标
2.被适配者
3.适配器
四、应用程序
五、执行结果
一、关于适配器模式
设计模式:8、适配器模式(包装器)_适配器模式的剩余适配-CSDN博客
二、设计要求
目前有一个运行良好系统,该系统中有一个类:BookNameList。BookNameList类使用Vector存放图书名称,但为用户提供的是Vector的枚举器,用户可以使用该枚举器查看Vector中存放的图书名称。目前一个开发小组正在设计一个新的系统,根据项目的特点,该系统准备在一个NewBookNameList类中使用LinkedList存放图书名称,但为了缩短开发周期,开发小组决定将已有系统中的图书名称导入到当前新系统中。请使用适配器模式实现开发小组的目的。
三、设计实现
针对上述问题,使用适配器模式设计若干个类
1.目标
本问题中,目标接口是java.util包中的Iterator。
2.被适配者
本问题中,被适配者是java.tuil包中的Enumeration。
3.适配器
适配器实现目标接口(Iterator),并包含被适配者的引用(Enumeration),代码如下:
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类:
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类:
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()); // } } }运行类:
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(); // 打印新系统的图书信息 } }