8、设计模式应用举例:适配器模式:Iterator接口与Enumeration接口

目录

一、关于适配器模式

二、设计要求

三、设计实现

1.目标

2.被适配者

3.适配器

四、应用程序

五、执行结果


一、关于适配器模式

设计模式: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();	// 打印新系统的图书信息
		

	}

}

五、执行结果

相关推荐
拆房老料4 小时前
DeepSeek Super-agent 架构解析:从单任务 Agent 到持续运行的任务系统
人工智能·设计模式·系统架构
工一木子9 小时前
设计模式与生活⑩:地铁没变,你换了个状态
设计模式
是2的10次方啊12 小时前
设计模式与生活⑪:地铁里被打扰,别总靠自己硬扛
设计模式
高晶1 天前
SPMI 控制器 RTL 设计与验证新手入门
设计模式·程序员·架构
geovindu1 天前
rust:N-Barrier Pattern
开发语言·后端·设计模式·rust·屏障模式·并发型模式
顧棟1 天前
OpenAPI 网关:鉴权 + 流量治理 一体化设计方案与实现
java·spring boot·设计模式
拆房老料1 天前
【第四部分:Agentic 智能体设计模式】17. Agent 路由模式详解:从意图识别到动态模型选择
java·设计模式·ai编程·策略模式
是2的10次方啊1 天前
设计模式与生活⑩:地铁没变,你换了个状态
设计模式
步行cgn2 天前
适配器设计模式:一个“翻译官”的故事
设计模式
扶尔魔ocy2 天前
【QT C++】常用设计模式
c++·设计模式