设计模式(十七)—— 迭代器模式(定义、案例分析、特点、缺点)


前言

文章内容主要参考了刘伟主编的《设计模式(第2版)》,同时也结合了自己的一些思考和理解,希望能帮到大家。


本篇讲解迭代器模式,该模式用于遍历并获取聚合中的对象,而不必关心聚合的内部结构。

正文

一、定义

迭代器模式(Iterator Pattern) :提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标(Cursor)。迭代器模式是一种对象行为型模式。

聚合对象:如一个列表(List)或者一个集合(Set)。
当我们需要一种方法来访问它的元素,而又不需要暴露它的内部结构。同时针对不同的需要,可能还要以不同的方式遍历整个聚合对象,但是我们并不希望在聚合对象的抽象层接口中充斥着各种不同遍历的操作。
怎样遍历一个聚合对象,又不需要了解聚合对象的内部结构,还能够提供多种不同的遍历方式,这就是迭代器模式所要解决的问题。

迭代器模式就是将存储和遍历操作分离成两个类,之后通过关联的方式灵活使用,同时具有一定的可拓展性。这也是“单一职责原则”的完美体现。

二、情景假设

电视机遥控器就是一个迭代器的实例,通过它可以实现对电视机频道集合的遍历操作,本实例我们将模拟电视机遥控器的实现。

三、情景分析

关于上面情景的类图(具体分析在下面)
在这里插入图片描述

首先定义抽象迭代器,提供基本迭代操作方法。

public interface TVIterator
{
   
	void setChannel(int i);
	void next();
	void previous();
	boolean isLast();
	Object currentChannel();
	boolean isFirst();
}

定义抽象聚合类Television

public interface Television{
   
	TVIterator createIterator();
}

这里其实利用了工厂方法模式,聚合类充当了工厂类,提供create方法去生产产品类迭代器,这样客户端便可以获取到迭代器进行遍历相关操作。

接下来是电视机类的具体类,这里我们要关注的的是,如何将聚合类和迭代器类进行关联。其实有两种方式:1.通过setter方式,将聚合类set为迭代器的属性,这样可以直接使用集合内容,还有种方式是将迭代器定义为聚集对象的内部类,这样也可以直接使用容器里的内容。后者的方式我们用的更多。

具体电视机类 SkyworthTelevision

public class SkyworthTelevision implements Television
{
   
	private Object[</
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值