分析MFC的设计模式-----行为模式(2)

flyboybit 2002-07-31 09:58:16
很高兴那么多人回复。的确,mfc确实不是一个很好的应用程序框架,毕竟它出现的比较早,但是它应用的最广泛,所以我们需要研究它,然后将这些模式应用于利用mfc进行软件开发中,可以让自己写的代码和应用程序框架融为一个整体,一就是说有一样的风格,这样很好。我还要说的是我分析的是行为模式,其他模式一样道理分析,只是要求你对mfc的运行及实现机制很熟悉才可以。的确,深入浅出里有很多东西属于设计模式的,应该是侯隽解用的设计模式,而不是设计模式利用的侯俊杰的技术吧。
今天我想顺着上一篇再占写东西,还往指正
迭代器(Iterator)
2.2.1迭代器简介
1. 意图
提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。
2.结构(无法输入图)
6. 参与者
I t e r a t o r(迭代器)
— 迭代器定义访问和遍历元素的接口。
C o n c r e t e I t e r a t o r(具体迭代器)
— 具体迭代器实现迭代器接口。
— 对该聚合遍历时跟踪当前位置。
A g g r e g a t e(聚合)
— 聚合定义创建相应迭代器对象的接口。
C o n c r e t e A g g r e g a t e(具体聚合)

— 具体聚合实现创建相应迭代器的接口,该操作返回C o n c r e t e I t e r a t o r的一个适当的实例。
2.2.2迭代器在MFC中的应用
MFC具有以下聚集类:
CArray----用于构成任意类型数组的模版类
CList------用于构成任意类型线性表的模版类
CMap------用于构成任意类型图的模版类
CTypedPtrArray----用于构成安全类型的数组指针的模版类
CTypedPtrarray-----用于构成安全类型的线性表指针的模版类
CTypedPtrmap-----用于构成安全类型的图指针的模版类。
例子:
用成员函数GetAt实现用索引数字来重新表示数组的代码:
CTypedPtrArray<CObArray, CPerson*> myArray;
for( int i = 0; i < myArray.GetSize();i++ )
{
CPerson* thePerson = myArray.GetAt( i );
...
}
用成员函数GetHeadPosition和GetNext来重新表述线性表的代码:
CTypedPtrList<CObList, CPerson*> myList;
POSITION pos = myList.GetHeadPosition();
while( pos != NULL )
{
CPerson* thePerson = myList.GetNext( pos );
...
}
用成员函数GetStartPosition来得到图的开始节点,用成员函数GetNextAssoc 得到当前节点相邻的数个节点。代码如下所示::
CMap<CString, LPCTSTR, CPerson*, CPerson*> myMap;
POSITION pos = myMap.GetStartPosition();

while( pos != NULL )
{
CPerson* pPerson;
CString string;
// Get key ( string ) and value ( pPerson )
myMap.GetNextAssoc( pos, string, pPerson );
// Use string and pPerson
}
这一模式的关键思想是将对列表的访问和遍历从列表对象中分离出来并放入一个迭代器对象中,以上代码充分说明了MFC正是这样做的。
...全文
37 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
sxhqfxy 2002-08-11
  • 打赏
  • 举报
回复
rery good
flyboybit 2002-08-05
  • 打赏
  • 举报
回复
这里可以支持html么?太麻烦了吧?
jimconrad 2002-08-02
  • 打赏
  • 举报
回复
因为你没画图……
flyboybit 2002-08-01
  • 打赏
  • 举报
回复
为什么这篇文章会没人看呢?

1,265

社区成员

发帖
与我相关
我的任务
社区描述
软件工程/管理 管理版
社区管理员
  • 研发管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧