1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 设计模式系列漫谈之五 - 迭代器模式

设计模式系列漫谈之五 - 迭代器模式

时间:2018-11-20 09:10:16

相关推荐

设计模式系列漫谈之五 - 迭代器模式

故事

小美是小雪最好的朋友。有一天, 小美问小雪:“小雪,怎么你的手机短信这么多啊,是不是谈恋爱了?”,小雪笑了一下,说:“还没呢”,小雪停顿了一下,“可是喜欢我的男孩倒是很多,这些男孩都不错,眼都快花了”。小美想了想:“跟我说说这些男孩子,我帮你选一个最优秀的”。

果然,小美开始给小雪策划了一个钻石王老五大调查(遍历):

1) 年龄小于30大于35者出局;

2) 身高低于180cm者出局;

3) 无房者出局;

4) 无车者出局;

5) 年薪低于100万者出局。

迭代器模式(ITerator)的解决方案

迭代器模式的意图:通过顺序遍历或逆序遍历等方式访问集合对象(List)中的各元素子对象(object)。一般来说,一个集合对象拥有两个职责:一是存储一组元素子对象;二是遍历集合中的各元素子对象。从依赖性来讲,前者是集合对象的根本属性;后者是可分离的变化点。

子对象接口如下:

namespaceXiaoXue

{

publicinterfaceIBoy

{

stringName{get;}

intGetAge();

intGetHeight();

boolHasHouse();

boolHasCar();

boolHasMillion();

}

}

子对象具体类如下:

namespaceXiaoXue

{

publicclassBoyA:IBoy

{

privatestring_Name="张三";

publicstringName

{

get{return_Name;}

}

publicintGetAge()

{

return25;

}

publicintGetHeight()

{

return187;

}

publicboolHasHouse()

{

returntrue;

}

publicboolHasCar()

{

returnfalse;

}

publicboolHasMillion()

{

returnfalse;

}

}

publicclassBoyB:IBoy

{

privatestring_Name="李四";

publicstringName

{

get{return_Name;}

}

publicintGetAge()

{

return32;

}

publicintGetHeight()

{

return170;

}

publicboolHasHouse()

{

returntrue;

}

publicboolHasCar()

{

returntrue;

}

publicboolHasMillion()

{

returntrue;

}

}

}

迭代器接口如下:

namespaceXiaoXue

{

publicinterfaceIListIterator

{

voidFirst();

voidLast();

boolMovePrevous();

boolMoveNext();

objectCurrent{get;}

}

}

迭代器如下:

namespaceXiaoXue

{

publicclassBoyList:IListIterator

{

privateList<IBoy>boys=null;//子对象列表

privateintindex=-1;

publicBoyList()

{

boys=newList<IBoy>();

}

//添加子对象

publicvoidAddBoy(IBoyboy)

{

boys.Add(boy);

}

publicvoidRemoveBoy(IBoyboy)

{

boys.Remove(boy);

index--;

}

publicvoidFirst()

{

index=0;

}

publicvoidLast()

{

index=boys.Count;

}

publicboolMovePrevious()

{

index--;

returnindex>-1;

}

publicboolMoveNext()

{

index++;

returnindex<boys.Count;

}

publicobjectCurrent

{

get{returnthis.boys[index];}

}

}

}

调用代码如下:

IListIteratoriterator=newBoyList();

iterator.AddBoy(newBoyA());

iterator.AddBoy(newBoyB());

while(iterator.MoveNext())

{

IBoyboy=(IBoy)iterator.Current

if(boy.GetAge()<30||boy.GetAge()>35)

{

iterator.RemoveBoy(boy);

}

elseif(boy.GetHeight()<180)

{

iterator.RemoveBoy(boy);

}

elseif(!boy.HasHouse())

{

iterator.RemoveBoy(boy);

}

elseif(!boy.HasCar())

{

iterator.RemoveBoy(boy);

}

elseif(!boy.HasMillion())

{

iterator.RemoveBoy(boy);

}

else

{

Console.WriteLine(boy.Name);

}

}

哈哈, 好象没有一个符合条件的,俗话说:“什么样的马配什么样的鞍”。这样的王老五只有到月球上去找吧!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。