news 2026/10/15 18:38:13

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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),代码如下:

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

五、执行结果

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/15 18:35:02

斐波那契四实现:递归、记忆化、DP与滚动数组的工程权衡

1. 项目概述&#xff1a;这不是一道“算数题”&#xff0c;而是一次对递归本质与内存边界的现场教学“2020秋数据结构实验第一题&#xff1a;兔子数列仿真&#xff08;斐波那契数列仿真&#xff09;C实现”——光看标题&#xff0c;很多刚接触数据结构的同学会下意识松一口气&a…

作者头像 李华
网站建设 2026/10/15 18:33:17

Java volatile原理深度解析:可见性、有序性与非原子性

1. 为什么“volatile”这个词在代码里总被当成“开关”用&#xff0c;却没人真懂它拧的是哪颗螺丝&#xff1f;刚入行那会儿&#xff0c;我看到同事在多线程代码里加volatile&#xff0c;就像给电灯拉了根明线——“这灯肯定能亮&#xff0c;一拉就亮&#xff0c;不卡顿”。后来…

作者头像 李华
网站建设 2026/10/15 18:32:28

STM32F10x官方固件库包:最小点灯工程与常见外设配置避坑实践

简介&#xff1a;STM32F10系列官方固件库包是意法半导体为基于ARM Cortex-M3内核的STM32F103系列微控制器提供的标准外设库资源&#xff0c;面向嵌入式系统开发者&#xff0c;解决官网下载繁琐的问题&#xff0c;让项目启动更快。压缩包内共有954个文件&#xff0c;大小约21.22…

作者头像 李华
网站建设 2026/10/15 18:31:06

ISM330DLC官方标定工具链STdC深度解析与工程落地

简介&#xff1a;本资源是面向嵌入式开发者的ISM330DLC六轴惯性传感器驱动与应用实践包&#xff0c;适用于物联网终端、可穿戴设备及运动姿态检测类项目开发&#xff0c;特别适合具备C语言基础和I2C/SPI通信经验的中级嵌入式工程师快速集成硬件。压缩包共5个文件&#xff08;3个…

作者头像 李华
网站建设 2026/10/15 18:31:03

cash-tail 完全指南:用纯 ES6 跨平台复刻 Unix tail 命令

开发工具CLI 【免费下载链接】cash Cross-platform Linux commands in ES6 项目地址&#xff1a; https://gitcode.com/gh_mirrors/ca/cash 点击查看 免费下载 导读 本文围绕 Cash 项目中的 tail 命令实现&#xff08;包名 cash-tail&#xff09;展开&#xff1a;它用 100% 纯…

作者头像 李华
网站建设 2026/10/15 18:30:46

2026深圳创业开公司实用攻略:代办机构挑选与注册费用避坑指南

深圳创业注册市场现状与痛点分析深圳聚集了大量科创类创业企业&#xff0c;研发投入比例高&#xff0c;很多初创团队在启动阶段就会面临股权设计、高新技术企业认定前置规划等问题。对中小微创业者来说&#xff0c;把有限的精力放在核心业务上&#xff0c;比自己跑流程更划算。…

作者头像 李华