第十六章 Caché 设计模式 迭代器模式

第十六章 Caché 设计模式 迭代器模式

定义

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

使用场景

  • 提供一个list的遍历方法。目的很明确,弱化遍历算法和容器之间的关系。
  • 根据传入的list额外提供一个遍历方法。
  • 当需要对聚集有多种方式遍历时,可以考虑用迭代器模式。

结构图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vXpAxGdb-1587771487345)(EC0A1078B57D4E0A86D37EE65BF2347E)]

描述

创建一个数组集合。

完整示例

定义迭代器接口

Class PHA.YX.Design.Iterator.Iterator Extends %RegisteredObject
{

Method HasNext() As %Boolean
{
}

Method Next()
{
}

}
    

实现迭代器接口

Class PHA.YX.Design.Iterator.IteratorImpl Extends Iterator
{

Property list As list Of %String;

Property cursor As %Integer [ InitialExpression = 0 ];

Method %OnNew(list) As %Status [ Private, ServerOnly = 1 ]
{
	s ..list = list
	Quit $$$OK
}

Method HasNext() As %Boolean
{
	q ..cursor '= ..list.Count()
}

Method Next()
{
	s obj = ""
	i ..HasNext() d
	.s ..cursor = ..cursor +1
	.s obj = ..list.GetAt(..cursor)
	q obj
}

}

定义容器接口

Class PHA.YX.Design.Iterator.Container Extends %RegisteredObject
{

Method add(obj)
{
}

Method remove(obj)
{
}

Method Iterator(obj) As Iterator
{
}

}

实现容器接口

Class PHA.YX.Design.Iterator.ContainerImpl Extends Container
{

Property list As List Of %String;

Method add(obj)
{
	d ..list.Insert(obj)
}

Method remove(obj)
{
	d ..list.RemoveAt(obj)
}

Method Iterator() As Iterator
{
	q ##class(IteratorImpl).%New(..list)
}

}

调用

/// d ##class(PHA.YX.Design.Program).Iterator() 
ClassMethod Iterator()
{
	#dim container as PHA.YX.Design.Iterator.ContainerImpl
	s container = ##class(PHA.YX.Design.Iterator.ContainerImpl).%New()
	d container.add("Java")
	d container.add("Cache")
	d container.add("Kotlin")
	d container.add("Flutter")
	d container.add("Python")
	d container.add("Swfit")
	d container.add("Objective-c")
	d container.add("C#")
	
	#dim iterator as PHA.YX.Design.Iterator.Iterator
	s iterator = container.Iterator()
	while (iterator.HasNext()){
		w iterator.Next(),!
	}
}

DHC-APP>d ##class(PHA.YX.Design.Program).Iterator()
Java
Cache
Kotlin
Flutter
Python
Swfit
Objective-c
C#

思考

创建一个Person类有Name属性,添加,然后用迭代器模式遍历。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yaoxin521123

谢谢您的支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值