蜗牛的家
男儿当自强
C++博客
首页
新文章
新随笔
聚合
管理
posts - 48, comments - 21, trackbacks - 0
C++模式-Iterator
意图:
提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示
UML图:
适用:
访问一个聚合对象的内容而无需暴露它的内部表示
支持对聚合对象的多种遍历
为遍历不同的聚合结构提供一个统一的接口
//
test.h
typedef
int
DATA;
/**/
////////////////////////////////////////////////////////////////////////
//
class
Iterater;
class
Aggregate
{
public
:
virtual
~
Aggregate()
{}
virtual
int
GetSize()
=
0
;
virtual
DATA GetItem(
int
nIndex)
=
0
;
}
;
class
Iterater
{
public
:
virtual
~
Iterater()
{}
virtual
void
First()
=
0
;
virtual
void
Next()
=
0
;
virtual
bool
IsDone()
=
0
;
virtual
DATA CurrentIter()
=
0
;
protected
:
Aggregate
*
m_pConCreateAggregate;
int
m_nIndex;
}
;
class
ConCreateAggregate :
public
Aggregate
{
public
:
ConCreateAggregate(
int
nSize);
virtual
~
ConCreateAggregate();
virtual
int
GetSize();
virtual
DATA GetItem(
int
nIndex);
private
:
int
m_nSize;
DATA
*
m_pData;
}
;
class
ConCreateIterater :
public
Iterater
{
public
:
ConCreateIterater(Aggregate
*
pAggregate);
virtual
~
ConCreateIterater()
{}
virtual
void
First();
virtual
void
Next();
virtual
bool
IsDone();
virtual
DATA CurrentIter();
}
;
//
test.cpp : Defines the entry point for the console application.
//
#include
"
stdafx.h
"
#include
<
iostream
>
#include
"
test.h
"
/**/
////////////////////////////////////////////////////////////////////////
//
ConCreateAggregate::ConCreateAggregate(
int
nSize) : m_nSize(nSize),m_pData(NULL)
{
m_pData
=
new
DATA[m_nSize];
for
(
int
i
=
0
; i
<
nSize;
++
i)
{
m_pData[i]
=
i;
}
}
ConCreateAggregate::
~
ConCreateAggregate()
{
delete []m_pData;
m_pData
=
NULL;
}
int
ConCreateAggregate::GetSize()
{
return
m_nSize;
}
DATA ConCreateAggregate::GetItem(
int
nIndex)
{
//
对外提供相同的接口,得到特定次序的值
if
(nIndex
<
m_nSize)
{
return
m_pData[nIndex];
}
else
{
return
-
1
;
}
}
ConCreateIterater::ConCreateIterater(Aggregate
*
pAggregate)
{
m_pConCreateAggregate
=
pAggregate;
m_nIndex
=
0
;
}
void
ConCreateIterater::First()
{
m_nIndex
=
0
;
}
void
ConCreateIterater::Next()
{
if
(m_nIndex
<
m_pConCreateAggregate
->
GetSize())
{
++
m_nIndex;
}
}
bool
ConCreateIterater::IsDone()
{
return
m_nIndex
==
m_pConCreateAggregate
->
GetSize();
}
DATA ConCreateIterater::CurrentIter()
{
//
间接引用此函数得到值
return
m_pConCreateAggregate
->
GetItem(m_nIndex);
}
/**/
////////////////////////////////////////////////////////////////////////
//
int
main(
int
argc,
char
*
argv[])
{
Aggregate
*
pAggregate
=
new
ConCreateAggregate(
4
);
Iterater
*
pIterater
=
new
ConCreateIterater(pAggregate);
for
(;
false
==
pIterater
->
IsDone(); pIterater
->
Next())
{
std::cout
<<
pIterater
->
CurrentIter()
<<
"
\n
"
;
}
system(
"
pause
"
);
return
0
;
}
posted on 2008-08-23 01:18
黑色天使
阅读(552)
评论(0)
编辑
收藏
引用
所属分类:
设计模式
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
decorator模式
MVC模式理解——当年给我一个browser多好(转)
C++设计模式-趣解
C++设计模式-visitor
C++设计模式-Memento
C++模式-Iterator
C++设计模式-Observer
C++设计模式-Command
C++模式-FlyWeight
C++设计模式-ChainOfResponsibility
网站导航:
博客园
IT新闻
BlogJava
博问
Chat2DB
管理
<
2008年8月
>
日
一
二
三
四
五
六
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(2)
给我留言
查看公开留言
查看私人留言
随笔分类
C\C++(8)
Hacker(1)
STL
VC&MFC(4)
操作系统(1)
多进程&多线程
流媒体开发
内存管理技术(2)
软件工程(1)
设计模式(20)
数据结构&算法(2)
网络开发(3)
随笔档案
2011年4月 (1)
2011年3月 (2)
2009年7月 (1)
2009年6月 (2)
2009年3月 (1)
2009年2月 (3)
2009年1月 (3)
2008年12月 (5)
2008年11月 (1)
2008年10月 (3)
2008年9月 (3)
2008年8月 (23)
文章档案
2011年3月 (1)
2009年6月 (1)
2008年11月 (1)
搜索
最新评论
1. re: C++设计模式-Observer
评论内容较长,点击标题查看
--no7dw
2. re: YUV格式详细解释与FFMPEG的关系
评论内容较长,点击标题查看
--windsome
3. re: 键盘过滤驱动源代码
@soul
再怎么懒也应该自己实现一部分吧
--黑色天使
4. re: 键盘过滤驱动源代码[未登录]
再怎么懒也该加上unload例程吧
--soul
5. re: CHttpDownLoad Beta 1.0
评论内容较长,点击标题查看
--tangxinfa
阅读排行榜
1. RGB、YUY2、YUYV、YVYU、UYVY与AYUV(转)(6640)
2. YUV格式详细解释与FFMPEG的关系(4285)
3. 如何检测内存泄漏(转)(3883)
4. memcpy的BUG(2697)
5. 内存池技术学习笔记(2322)
评论排行榜
1. CHttpDownLoad Beta 1.0(10)
2. memcpy的BUG(5)
3. 事件模型SOCKET封装(2)
4. 键盘过滤驱动源代码(2)
5. C++设计模式-Observer(1)