蝸牛的家
男兒當(dāng)自強(qiáng)
C++博客
首頁(yè)
新文章
新隨筆
聚合
管理
posts - 48, comments - 21, trackbacks - 0
C++模式-Iterator
意圖:
提供一種方法順序訪問(wèn)一個(gè)聚合對(duì)象中各個(gè)元素,而又不暴露該對(duì)象的內(nèi)部表示
UML圖:
適用:
訪問(wèn)一個(gè)聚合對(duì)象的內(nèi)容而無(wú)需暴露它的內(nèi)部表示
支持對(duì)聚合對(duì)象的多種遍歷
為遍歷不同的聚合結(jié)構(gòu)提供一個(gè)統(tǒng)一的接口
//
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)
{
//
對(duì)外提供相同的接口,得到特定次序的值
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()
{
//
間接引用此函數(shù)得到值
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
黑色天使
閱讀(574)
評(píng)論(0)
編輯
收藏
引用
所屬分類:
設(shè)計(jì)模式
只有注冊(cè)用戶
登錄
后才能發(fā)表評(píng)論。
【推薦】100%開(kāi)源!大型工業(yè)跨平臺(tái)軟件C++源碼提供,建模,組態(tài)!
相關(guān)文章:
decorator模式
MVC模式理解——當(dāng)年給我一個(gè)browser多好(轉(zhuǎn))
C++設(shè)計(jì)模式-趣解
C++設(shè)計(jì)模式-visitor
C++設(shè)計(jì)模式-Memento
C++模式-Iterator
C++設(shè)計(jì)模式-Observer
C++設(shè)計(jì)模式-Command
C++模式-FlyWeight
C++設(shè)計(jì)模式-ChainOfResponsibility
網(wǎng)站導(dǎo)航:
博客園
IT新聞
BlogJava
博問(wèn)
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
常用鏈接
我的隨筆
我的評(píng)論
我參與的隨筆
留言簿
(2)
給我留言
查看公開(kāi)留言
查看私人留言
隨筆分類
C\C++(8)
Hacker(1)
STL
VC&MFC(4)
操作系統(tǒng)(1)
多進(jìn)程&多線程
流媒體開(kāi)發(fā)
內(nèi)存管理技術(shù)(2)
軟件工程(1)
設(shè)計(jì)模式(20)
數(shù)據(jù)結(jié)構(gòu)&算法(2)
網(wǎng)絡(luò)開(kāi)發(fā)(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)
搜索
最新評(píng)論
1.?re: C++設(shè)計(jì)模式-Observer
評(píng)論內(nèi)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
--no7dw
2.?re: YUV格式詳細(xì)解釋與FFMPEG的關(guān)系
評(píng)論內(nèi)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
--windsome
3.?re: 鍵盤過(guò)濾驅(qū)動(dòng)源代碼
@soul
再怎么懶也應(yīng)該自己實(shí)現(xiàn)一部分吧
--黑色天使
4.?re: 鍵盤過(guò)濾驅(qū)動(dòng)源代碼[未登錄](méi)
再怎么懶也該加上unload例程吧
--soul
5.?re: CHttpDownLoad Beta 1.0
評(píng)論內(nèi)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
--tangxinfa
閱讀排行榜
1.?RGB、YUY2、YUYV、YVYU、UYVY與AYUV(轉(zhuǎn))(6703)
2.?YUV格式詳細(xì)解釋與FFMPEG的關(guān)系(4320)
3.?如何檢測(cè)內(nèi)存泄漏(轉(zhuǎn))(3908)
4.?memcpy的BUG(2730)
5.?內(nèi)存池技術(shù)學(xué)習(xí)筆記(2361)
評(píng)論排行榜
1.?CHttpDownLoad Beta 1.0(10)
2.?memcpy的BUG(5)
3.?事件模型SOCKET封裝(2)
4.?鍵盤過(guò)濾驅(qū)動(dòng)源代碼(2)
5.?C++設(shè)計(jì)模式-Observer(1)
Copyright ©2025 黑色天使 Powered By
博客園
模板提供:
滬江博客
欧美粉嫩小泬久久久久久久
|
久久久久久免费一区二区三区
|
久久99热这里只有精品国产
|
亚洲AV日韩AV天堂久久
|
精品国产一区二区三区久久久狼
|
精品久久人人妻人人做精品
|
三级片免费观看久久
|
亚洲国产精品无码久久SM
|
人妻少妇久久中文字幕一区二区
|
狠狠色丁香婷综合久久
|
久久夜色精品国产www
|
久久精品人成免费
|
久久综合视频网站
|
国内精品久久国产大陆
|
精品久久久一二三区
|
91久久香蕉国产熟女线看
|
亚洲天堂久久久
|
国产成人无码精品久久久免费
|
欧美麻豆久久久久久中文
|
国产∨亚洲V天堂无码久久久
|
思思久久99热免费精品6
|
久久久久亚洲av无码专区导航
|
久久国产视频99电影
|
国产高潮国产高潮久久久
|
久久久久久曰本AV免费免费
|
久久精品国产第一区二区三区
|
国产午夜免费高清久久影院
|
91精品国产乱码久久久久久
|
久久精品国产亚洲5555
|
色妞色综合久久夜夜
|
无码任你躁久久久久久
|
A狠狠久久蜜臀婷色中文网
|
久久综合亚洲鲁鲁五月天
|
久久久久亚洲av毛片大
|
99久久免费只有精品国产
|
97久久精品午夜一区二区
|
久久综合狠狠综合久久
|
色综合久久综合中文综合网
|
久久人人爽人人爽人人片AV不
|
武侠古典久久婷婷狼人伊人
|
很黄很污的网站久久mimi色
|