设计模式之迭代器模式

本文介绍了一种使用迭代器模式遍历不同游戏英雄列表的方法。通过实现迭代器接口,多个游戏对象可以被统一管理并遍历,展示了如何在Java中利用迭代器模式进行对象集合的灵活操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在需要迭代的对象类中实现迭代器接口,接着在一个迭代对象管理类中把这些需要迭代的对象一个个遍历出来即可。首先设计一个获取迭代对象的接口,然后将需要迭代的对象类实现该接口,再设计一个管理迭代对象的类,最后是一个客户端主类。

获取迭代对象的接口:

package com.freshbin.pattern.iterator.myexample.iterator;

import java.util.Iterator;

/**
 * 管理需要遍历的对象接口
 * 
 * @author freshbin
 * @date 2019-1-8 11:44:17
 */
public interface ContainerInterface {
	Iterator<String> getIterator();
}

需要迭代的对象类:

package com.freshbin.pattern.iterator.myexample.iterator;

import java.util.Iterator;

import com.sun.xml.internal.ws.dump.LoggingDumpTube.Position;

/**
 * GloryOfKingGame 
 * 
 * @author freshbin
 * @date 2019-1-8 11:46:07
 */
public class GloryOfKingGame implements ContainerInterface {

	private final static Integer MAX_ARRAY_SIZE = 10;
	private Integer index = 0;
	
	private String[] heros = new String[MAX_ARRAY_SIZE];
	
	public GloryOfKingGame() {
		addItems("亚瑟");
		addItems("后羿");
		addItems("鲁班");
		addItems("安琪拉");
		addItems("程咬金");
		addItems("项羽");
	}
	
	private void addItems(String name) {
		heros[index] = name;
		index++;
	}
	
	@Override
	public Iterator<String> getIterator() {
		return new GloryOfKingIterator();
	}
	
	class GloryOfKingIterator implements Iterator {

		private Integer position = 0;
		
		@Override
		public boolean hasNext() {
			if(position < index) {
				return true;
			}
			
			return false;
		}

		@Override
		public Object next() {
			String name = heros[position];
			position++;
			return name;
		}
		
	}

}
package com.freshbin.pattern.iterator.myexample.iterator;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * LOLGame 
 * @author freshbin
 * @date 2019-1-8 11:46:07
 */
public class LOLGame implements ContainerInterface {

	private List<String> heros;
	
	public LOLGame() {
		heros = new ArrayList<>();
		heros.add("盖伦");
		heros.add("寒冰");
		heros.add("马尔扎哈");
		heros.add("蛮王");
		heros.add("剑圣");
		heros.add("赵信");
	}
	
	@Override
	public Iterator<String> getIterator() {
		//return new LOLIterator();
		return heros.iterator();
	}

	/*class LOLIterator implements Iterator {

		private Integer position = 0;
		
		@Override
		public boolean hasNext() {
			if(position < heros.size()) {
				return true;
			}
			
			return false;
		}

		@Override
		public Object next() {
			String name = heros.get(position);
			position++;
			return name;
		}
		
	}*/
}

这里使用内部类实现迭代器接口,因为list已经实现了Iterator接口,所以就可以不用内部类实现迭代器接口了。

管理迭代对象的类:

package com.freshbin.pattern.iterator.myexample;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * 遍历迭代器
 * 
 * @author freshbin
 * @date 2019-1-8 12:04:42
 */
public class ManagerIterator {
	private List<Iterator> iterators;
	private Integer parallelFlag = 0;
	private Integer chuanxingFlag = 0;

	public ManagerIterator() {
		iterators = new ArrayList<>();
	}

	public void addIterator(Iterator iterator) {
		iterators.add(iterator);
	}

	public void parallelDisplayIterator() {
		System.out.println("并行方式");
		iterators.stream().parallel().forEach(iterator -> {
			System.out.println("==========开始================" + parallelFlag);
			while (iterator.hasNext()) {
				System.out.println(iterator.next());
			}

			System.out.println("===========结束===============" + parallelFlag);
			parallelFlag++;
		});
	}

	public void chuanxingDisplayIterator() {
		System.out.println("串行方式");
		iterators.stream().forEach(iterator -> {
			System.out.println("==========开始===============" + chuanxingFlag);
			while (iterator.hasNext()) {
				System.out.println(iterator.next());
			}

			System.out.println("==========开始===============" + chuanxingFlag);
			chuanxingFlag++;
		});
	}
}

这里使用了jdk8的并行遍历集合,第一次用这个形式遍历集合,看起来遍历方法内部像是会存在多线程问题

客户端主类:

package com.freshbin.pattern.iterator.myexample;

import com.freshbin.pattern.iterator.myexample.iterator.ContainerInterface;
import com.freshbin.pattern.iterator.myexample.iterator.GloryOfKingGame;
import com.freshbin.pattern.iterator.myexample.iterator.LOLGame;

/**
 * 迭代器模式
 * 
 * @author freshbin
 * @date 2019-1-8 11:40:42
 */
public class IteratorPatternMain {
	public static void main(String[] args) {
		ContainerInterface lolIterator = new LOLGame();
		ContainerInterface gloryOfKingIterator = new GloryOfKingGame();
		
		ManagerIterator managerIterator = new ManagerIterator();
		managerIterator.addIterator(lolIterator.getIterator());
		managerIterator.addIterator(gloryOfKingIterator.getIterator());
		
		managerIterator.parallelDisplayIterator();
//		managerIterator.chuanxingDisplayIterator();
	}
}

最后是效果图:

多运行几次可以看到,参数的赋值出现了问题,说明集合的元素不是一个个取出来遍历的。

github地址:https://github.com/freshbin/designPattern

内容概要:该论文聚焦于T2WI核磁共振图像超分辨率问题,提出了一种利用T1WI模态作为辅助信息的跨模态解决方案。其主要贡献包括:提出基于高频信息约束的网络框架,通过主干特征提取分支和高频结构先验建模分支结合Transformer模块和注意力机制有效重建高频细节;设计渐进式特征匹配融合框架,采用多阶段相似特征匹配算法提高匹配鲁棒性;引入模型量化技术降低推理资源需求。实验结果表明,该方法不仅提高了超分辨率性能,还保持了图像质量。 适合人群:从事医学图像处理、计算机视觉领域的研究人员和工程师,尤其是对核磁共振图像超分辨率感兴趣的学者和技术开发者。 使用场景及目标:①适用于需要提升T2WI核磁共振图像分辨率的应用场景;②目标是通过跨模态信息融合提高图像质量,解决传统单模态方法难以克服的高频细节丢失问题;③为临床诊断提供更高质量的影像资料,帮助医生更准确地识别病灶。 其他说明:论文不仅提供了详细的网络架构设计与实现代码,还深入探讨了跨模态噪声的本质、高频信息约束的实现方式以及渐进式特征匹配的具体过程。此外,作者还对模型进行了量化处理,使得该方法可以在资源受限环境下高效运行。阅读时应重点关注论文中提到的技术创新点及其背后的原理,理解如何通过跨模态信息融合提升图像重建效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值