首页 > 其他分享 >设计模式回顾之十二:迭代器模式(Iterator)

设计模式回顾之十二:迭代器模式(Iterator)

时间:2023-09-14 13:36:38浏览次数:35  
标签:Node return name 迭代 Iterator NodeCollection new 设计模式 public


设计模式回顾系列文章:主要针对工作中常用常见的设计模式进行整理、总结,同时分享以供大家拍砖。

------------------------------------------------

迭代器模式(Iterator)

提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。

适用于:

访问一个聚合对象的内容而无需暴露它的内部表示。 

支持对聚合对象的多种遍历。 

为遍历不同的聚合结构提供一个统一的接口(即支持多态迭代)。 

 

程序实现:

节点数据结构

public class Node {
	private String name;
	
	public Node(String name){
		this.name=name;
	}
	
	public String getName(){
		return name;
	}
	public void setName(String name){
		this.name = name;
	}
}

聚合数据结构

public class NodeCollection {
	private ArrayList<Node> list = new ArrayList<Node>();
	private int nodeMax = 0;
	
	public void addNode(Node n){
		list.add(n);
		nodeMax++;
	}
	public Node getNode(int i){
		return list.get(i);
	}
	public int getMaxNum(){
		return nodeMax;
	}
}

迭代子抽象类:

public abstract class Iterator {
	abstract public Node next();
	abstract public boolean hasNext();
}

具体类,一个反向迭代器:

public class ReverseIterator extends Iterator{
	private NodeCollection nodeCollection;
	private int currentIndex;
	
	public ReverseIterator(NodeCollection nc){
		this.nodeCollection=nc;
		this.currentIndex=nc.getMaxNum()-1;
	}
	@Override
	public Node next() {
		return(nodeCollection.getNode(currentIndex--));
	}
	@Override
	public boolean hasNext() {
		if (currentIndex == -1) return false;
		return true;
	}
}

客户端调用:

public static void main(String[] args) {
		NodeCollection c = new NodeCollection();
		c.addNode(new Node("A"));
		c.addNode(new Node("B"));
		c.addNode(new Node("C"));
		ReverseIterator ri = new ReverseIterator(c);
		while(ri.hasNext()){
			Node node = ri.next();
			System.out.println("node name:"+node.getName());
		}
}

 

其实这个模式也会经常用到,例如使用Java集合框架中的Iterator接口遍历各种collection时。

 

标签:Node,return,name,迭代,Iterator,NodeCollection,new,设计模式,public
From: https://blog.51cto.com/u_6978506/7468946

相关文章

  • 设计模式回顾之十:工厂方法模式(FactoryMethod)
    设计模式回顾系列文章:主要针对工作中常用常见的设计模式进行整理、总结,同时分享以供大家拍砖。------------------------------------------------工厂方法模式(FactoryMethod)定义一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod使一个类的实例化延迟到其子类。......
  • 设计模式回顾之九:建造者模式(Builder)
    设计模式回顾系列文章:主要针对工作中常用常见的设计模式进行整理、总结,同时分享以供大家拍砖。------------------------------------------------建造者模式(Builder)将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 适用于:当创建复杂对象的算法应该......
  • 设计模式之:1单例模式
    1 单例模式1.1     引言单例模式就是保证在整个应用程序的生命周期中,在任何时刻,被指定的类只有一个实例,并为客户程序提供一个获取该实例的全局访问点。1.2     经典模式publicclassSingleton{privatestaticSingletoninstance;private......
  • 匿名函数、常见的内置函数、可迭代对象、迭代器对象、for循环的内部原理、异常捕获
    匿名函数注意:匿名函数一般不单独使用匿名函数其实就是没有名字的函数关键字lambda#匿名函数也是必须加括号才能使用匿名函数的语法格式:lambda形参:返回值defindex(形参):返回值''''''''''''res=lambdax,y:x+yprint(res(1,2))!常见内......
  • 【设计模式】状态模式State:通过有限状态机监控功能的 "状态变化"
    (目录)状态模式的应用场景非常广泛,比如:线上购物订单、手机支付、音乐播放器、游戏、工作流引擎等场景。状态模式设计的初衷是应对同一个对象里不同状态变化时的不同行为的变化。模式原理原始定义是:允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了自己的......
  • 【设计模式】策略模式Strategy:解决不同活动策略营销推荐场景
    (目录)模板方法模式能帮助我们进行公有方法的抽取,起到快速复用和扩展的作用。另一种快速复用和扩展代码的行为型模式:策略模式。策略模式在实际的开发中很常用,最常见的应用场景是利用它来替换过多的if-else嵌套的逻辑判断。除此之外,还能结合工厂模式给客户端提供非常灵活的使......
  • 设计模式-观察者模式
    设计模式提供了软件开发过程中的一些最佳实践,可以帮助我们解决常见的编程问题,提高软件的可维护性和可复用性,并使我们的代码更加健壮和灵活。设计模式可以带来以下好处:提高代码的可读性和可维护性、提高软件的可复用性、提高开发效率、提高系统的灵活性和可扩展性。今天我们讲一下观......
  • 《精通Python设计模式》 PDF电子书 +源码
    第1章工厂模式第2章建造者模式第3章其他创建型模式第4章适配器模式第5章装饰器模式第6章桥接模式第7章外观模式第8章其他结构型模式第9章职责链模式第10章命令模式第11章观察者模式第12章状态模式第13章其他行为型模式第14......
  • 设计模式-门面模式
    门面模式(文章目录)1、什么是门面模式  门面模式为子系统提供一组统一的接口,定义一组高层接口让子系统更易用。注意这里针对的是接口。  这个定义很简洁,我再进一步解释一下。  假设有一个系统A,提供了a、b、c、d四个接口。系统B完成某个业务功能,需要调用A系统的......
  • 6. 前端设计模式之观察者模式
    使用观察者模式,我们可以将某些对象(观察者)订阅到另一个对象(可观察对象)。当一个事件发生时,可观察对象会通知它的所有观察者!这个模式出境的概率就比较高了,无论是在前端还是后端,都能见到它的身影,特别跟事件有关的场景。从定义看这个模式涉及到两种对象,一种可观察对象也就是观察的......