head first-------------iterator pattern

本文介绍迭代器设计模式的两种实现方式:自定义迭代器和使用JDK自带的Iterator。通过实例展示如何在不同集合中应用迭代器模式进行元素遍历。
head first------------迭代器设计模式
       迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而不是去暴露其内部的表示。
       以下是两种实现迭代器模式的方式:第一种为自定义的迭代器,第二种是利用JDK自身提供的Iterator实现
       //第一种方式:自定义实现迭代器
      package com.clark.iteratorpattern;
/**
 * Menu Item class
 * @author Administrator
 *
 */
public class MenuItem {
private String name;//菜单名称
private String description;//菜单描述
private boolean vegetarian;//是否为蔬菜
private double price;//菜单价格
public MenuItem(String name, String description, boolean vegetarian,
double price) {
this.name = name;
this.description = description;
this.vegetarian = vegetarian;
this.price = price;
}
public String getName() {
return name;
}
public String getDescription() {
return description;
}
public boolean isVegetarian() {
return vegetarian;
}
public double getPrice() {
return price;
}
}

package com.clark.iteratorpattern;
/**
 * 迭代器,其用于迭代输出
 * @author Administrator
 *
 */
public interface Iterator{
public  boolean hasNext();
public Object next();
}

package com.clark.iteratorpattern;


import javax.swing.plaf.basic.BasicInternalFrameTitlePane.MaximizeAction;


/**
 * 餐厅订单
 * @author Administrator
 *
 */
public class DinerMenu {
public static final int MAX_ITEMS=6;//限制最大数量为6
public int numberOfItems=0;//initialization zero
MenuItem[] menuItems;//用数组存储
//initialization DinerMenu
public DinerMenu(){
menuItems=new MenuItem[MAX_ITEMS];
addItem("Vegetarian BLT", "Bacon with lettuce on whole wheat", true, 3);
addItem("Soup of the day", "Soup of the day,With a side of potato salad", false, 4);
addItem("qing jiao chao rou", "la jiao chao rou", false, 3.4);
}
//add Item
public void addItem(String name,String description,boolean vegetarian,double price){
MenuItem menuItem=new MenuItem(name, description, vegetarian, price);
if(numberOfItems>=MAX_ITEMS){
System.out.println("Sorry,Menu is full! can't add item to menu");
}else{
menuItems[numberOfItems]=menuItem;
numberOfItems++;
}
}
//迭代得到Iterator接口
public Iterator createIterator(){
return new DinerMenuIterator(menuItems);
}
}

package com.clark.iteratorpattern;


/**
 * 
 * @author Administrator
 *  Diner 实现Iterator 用于迭代输出菜单项
 */
public class DinerMenuIterator implements Iterator {
MenuItem[] items;
int position=0;
public DinerMenuIterator(MenuItem[] items){
this.items=items;
}
public boolean hasNext() {
if(position>=items.length||items[position]==null){
return false;
}else{
return true;
}
}


public Object next() {
MenuItem menuItem=items[position];
position++;
return menuItem;
}


}

package com.clark.iteratorpattern;


import java.util.ArrayList;


/**
 * 煎饼屋
 * @author Administrator
 *
 */
public class PancakeHouseMenu{
ArrayList menuItems;//用ArrayList存储
//initialization DinerMenu
public PancakeHouseMenu(){
menuItems=new ArrayList();
addItem("Dangao BLT", "DanGao with lettuce on whole wheat", true, 3);
addItem("shaobing", "breakfast is shaobing", false, 5);
addItem("doujiang", "yingyang", false, 53.4);
}
//add Item
public void addItem(String name,String description,boolean vegetarian,double price){
MenuItem menuItem=new MenuItem(name, description, vegetarian, price);
menuItems.add(menuItem);
}
//迭代得到Iterator接口
public Iterator createIterator(){
return new PancakeHouseMenuIterator(menuItems);
}
}

package com.clark.iteratorpattern;


import java.util.ArrayList;


/**
 * 
 * @author Administrator
 *  Diner 实现Iterator 用于迭代输出菜单项
 */
public class PancakeHouseMenuIterator implements Iterator {
ArrayList items;
MenuItem menuItem;
int number=0;
public PancakeHouseMenuIterator(ArrayList items){
this.items=items;
}
public boolean hasNext() {
if(number>=items.size()||items.get(number)==null){
return false;
}else{
number++;
return true;
}
}
public Object next() {
return items.get(number-1);
}
}

package com.clark.iteratorpattern;
/**
 * 服务员类
 * @author Administrator
 */
public class Waitress {
//女招待员招待的两个菜单
public PancakeHouseMenu pancakeHouseMenu;
public DinerMenu dinerMenu;

public Waitress(PancakeHouseMenu pancakeHouseMenu, DinerMenu dinerMenu) {
this.pancakeHouseMenu = pancakeHouseMenu;
this.dinerMenu = dinerMenu;
}
//print menu detail
public void printMenu(){
Iterator pancakeIterator=pancakeHouseMenu.createIterator();
Iterator dinerIterator=dinerMenu.createIterator();
System.out.println("Menu\n---------\nBreakFast");
printMenu(pancakeIterator);
System.out.println("\nLunch");
printMenu(dinerIterator);
}
//print iterator 
private void printMenu(Iterator iterator){
while(iterator.hasNext()){
MenuItem menu=(MenuItem)iterator.next();
System.out.print(menu.getName()+", ");
System.out.print(menu.getDescription()+", ");
System.out.println(menu.getPrice());
}
}
}

package com.clark.iteratorpattern;
/**
 * Test CLASS
 * @author Administrator
 *
 */
public class MenuTestDrive {
public static void main(String[] args) {
PancakeHouseMenu pancakeHouseMenu=new PancakeHouseMenu();
DinerMenu dinerMenu=new DinerMenu();

Waitress ws=new Waitress(pancakeHouseMenu, dinerMenu);
ws.printMenu();
}
}

//==================第二种:使用jdk自身迭代器实现====================
package com.clark.iteratorpattern.jdkiterator;


import java.util.Iterator;
public interface Menu {
public Iterator createIterator();
}
package com.clark.iteratorpattern.jdkiterator;
/**
 * Menu Item class
 * @author Administrator
 *
 */
public class MenuItem {
private String name;//菜单名称
private String description;//菜单描述
private boolean vegetarian;//是否为蔬菜
private double price;//菜单价格
public MenuItem(String name, String description, boolean vegetarian,
double price) {
this.name = name;
this.description = description;
this.vegetarian = vegetarian;
this.price = price;
}
public String getName() {
return name;
}
public String getDescription() {
return description;
}
public boolean isVegetarian() {
return vegetarian;
}
public double getPrice() {
return price;
}
}
package com.clark.iteratorpattern.jdkiterator;


import java.util.Iterator;




public class DinerMenu implements Menu {
public static final int MAX_ITEMS=6;//限制最大数量为6
public int numberOfItems=0;//initialization zero
MenuItem[] menuItems;//用数组存储
//initialization DinerMenu
public DinerMenu(){
menuItems=new MenuItem[MAX_ITEMS];
addItem("Vegetarian BLT", "Bacon with lettuce on whole wheat", true, 3);
addItem("Soup of the day", "Soup of the day,With a side of potato salad", false, 4);
addItem("qing jiao chao rou", "la jiao chao rou", false, 3.4);
}
//add Item
public void addItem(String name,String description,boolean vegetarian,double price){
MenuItem menuItem=new MenuItem(name, description, vegetarian, price);
if(numberOfItems>=MAX_ITEMS){
System.out.println("Sorry,Menu is full! can't add item to menu");
}else{
menuItems[numberOfItems]=menuItem;
numberOfItems++;
}
}
//迭代得到Iterator接口
public Iterator createIterator(){
return new DinerMenuIterator(menuItems);
}
public MenuItem[] getMenuItems(){
return menuItems;
}
}
package com.clark.iteratorpattern.jdkiterator;


import java.util.Iterator;
/**
 * 餐厅订单
 * @author Administrator
 *
 */
public class DinerMenuIterator implements Iterator{
MenuItem[] list;
int position = 0;
 
public DinerMenuIterator(MenuItem[] list) {
this.list = list;
}
 
public Object next() {
MenuItem menuItem = list[position];
position = position + 1;
return menuItem;
}
 
public boolean hasNext() {
if (position >= list.length || list[position] == null) {
return false;
} else {
return true;
}
}
  
public void remove() {
if (position <= 0) {
throw new IllegalStateException
("You can't remove an item until you've done at least one next()");
}
if (list[position-1] != null) {
for (int i = position-1; i < (list.length-1); i++) {
list[i] = list[i+1];
}
list[list.length-1] = null;
}
}
}
package com.clark.iteratorpattern.jdkiterator;


import java.util.ArrayList;




/**
 * 煎饼屋
 * @author Administrator
 *
 */
public class PancakeHouseMenu implements Menu{
ArrayList menuItems;//用ArrayList存储,其可以实现Iterator的迭代
//initialization DinerMenu
public PancakeHouseMenu(){
menuItems=new ArrayList();
addItem("Dangao BLT", "DanGao with lettuce on whole wheat", true, 3);
addItem("shaobing", "breakfast is shaobing", false, 5);
addItem("doujiang", "yingyang", false, 53.4);
}
//add Item
public void addItem(String name,String description,boolean vegetarian,double price){
MenuItem menuItem=new MenuItem(name, description, vegetarian, price);
menuItems.add(menuItem);
}
//迭代得到Iterator接口
@Override
public java.util.Iterator createIterator() {
return menuItems.iterator();
}
public ArrayList getMenuItems(){
return menuItems;
}
}

package com.clark.iteratorpattern.jdkiterator;


import java.util.Iterator;


/**
 * 服务员类
 * @author Administrator
 */
public class Waitress {
//女招待员招待的两个菜单
public Menu pancakeHouseMenu;
public Menu dinerMenu;

public Waitress(Menu pancakeHouseMenu, Menu dinerMenu) {
this.pancakeHouseMenu = pancakeHouseMenu;
this.dinerMenu = dinerMenu;
}
//print menu detail
public void printMenu(){
Iterator pancakeIterator= pancakeHouseMenu.createIterator();
Iterator dinerIterator= dinerMenu.createIterator();
System.out.println("Menu\n---------\nBreakFast");
printMenu(pancakeIterator);
System.out.println("\nLunch");
printMenu(dinerIterator);
}
//print iterator 
private void printMenu(Iterator iterator){
while(iterator.hasNext()){
MenuItem menu=(MenuItem)iterator.next();
System.out.print(menu.getName()+", ");
System.out.print(menu.getDescription()+", ");
System.out.println(menu.getPrice());
}
}
}

package com.clark.iteratorpattern.jdkiterator;
/**
 * Test CLASS
 * @author Administrator
 *
 */
public class MenuTestDrive {
public static void main(String[] args) {
Menu pancakeHouseMenu=new PancakeHouseMenu();
Menu dinerMenu=new DinerMenu();

Waitress ws=new Waitress(pancakeHouseMenu, dinerMenu);
ws.printMenu();
}
}

内容概要:本文详细介绍了一个基于C++的养老院管理系统的设计与实现,旨在应对人口老龄化带来的管理挑战。系统通过整合住户档案、健康监测、护理计划、任务调度等核心功能,构建了从数据采集、清洗、AI风险预测到服务调度与可视化的完整技术架构。采用C++高性能服务端结合消息队列、规则引擎和机器学习模型,实现了健康状态实时监控、智能任务分配、异常告警推送等功能,并解决了多源数据整合、权限安全、老旧硬件兼容等实际问题。系统支持模块化扩展与流程自定义,提升了养老服务效率、医护协同水平和住户安全保障,同时为运营决策提供数据支持。文中还提供了关键模块的代码示例,如健康指数算法、任务调度器和日志记录组件。; 适合人群:具备C++编程基础,从事软件开发或系统设计工作1-3年的研发人员,尤其是关注智慧养老、医疗信息系统开发的技术人员。; 使用场景及目标:①学习如何在真实项目中应用C++构建高性能、可扩展的管理系统;②掌握多源数据整合、实时健康监控、任务调度与权限控制等复杂业务的技术实现方案;③了解AI模型在养老场景中的落地方式及系统架构设计思路。; 阅读建议:此资源不仅包含系统架构与模型描述,还附有核心代码片段,建议结合整体设计逻辑深入理解各模块之间的协同机制,并可通过重构或扩展代码来加深对系统工程实践的掌握。
内容概要:本文详细介绍了一个基于C++的城市交通流量数据可视化分析系统的设计与实现。系统涵盖数据采集与预处理、存储与管理、分析建模、可视化展示、系统集成扩展以及数据安全与隐私保护六大核心模块。通过多源异构数据融合、高效存储检索、实时处理分析、高交互性可视化界面及模块化架构设计,实现了对城市交通流量的实时监控、历史趋势分析与智能决策支持。文中还提供了关键模块的C++代码示例,如数据采集、清洗、CSV读写、流量统计、异常检测及基于SFML的柱状图绘制,增强了系统的可实现性与实用性。; 适合人群:具备C++编程基础,熟悉数据结构与算法,有一定项目开发经验的高校学生、研究人员及从事智能交通系统开发的工程师;适合对大数据处理、可视化技术和智慧城市应用感兴趣的技术人员。; 使用场景及目标:①应用于城市交通管理部门,实现交通流量实时监测与拥堵预警;②为市民出行提供路径优化建议;③支持交通政策制定与信号灯配时优化;④作为智慧城市建设中的智能交通子系统,实现与其他城市系统的数据协同。; 阅读建议:建议结合文中代码示例搭建开发环境进行实践,重点关注多线程数据采集、异常检测算法与可视化实现细节;可进一步扩展机器学习模型用于流量预测,并集成真实交通数据源进行系统验证。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值