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

	}

}

五、执行结果

相关推荐
高晶2 小时前
ARM 嵌入式 Linux 系统 U-Boot 开发与移植实战M
设计模式·程序员
geovindu7 小时前
rust: Chain of Responsibility Pattern
开发语言·后端·设计模式·rust·责任链模式·行为模式
拆房老料8 小时前
【第四部分:Agentic 智能体设计模式】15.为什么 Agent 也需要设计模式
人工智能·设计模式·ai·ai-native
geovindu9 小时前
rust: Chain of Responsibility Pattern (续)
开发语言·后端·设计模式·rust·责任链模式·行为模式
Lost of 程序猿10 小时前
责任链模式实战:审批流里“层层把关“的艺术
后端·设计模式·asp.net·责任链模式
希洛兔1 天前
状态模式详解:让对象随内部状态自动改变行为
java·设计模式·状态模式
博风1 天前
7、设计模式应用举例:策略模式:加密、解密文件
设计模式·策略模式
4SAPI1 天前
Provider Adapter设计模式:如何让AI应用支持多个模型
网络·人工智能·设计模式
geovindu1 天前
rust: pool Pattern
开发语言·后端·设计模式·rust·对象池简写模式