﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-C++ Programmer's Cookbook-随笔分类-Design pattern</title><link>http://www.cppblog.com/mzty/category/653.html</link><description>&lt;br/&gt;  
&lt;br/&gt;
&lt;a href = "http://www.cppblog.com/mzty/archive/2007/03/02/19109.html"&gt;&lt;font size = 5 color ="#00FFFF"&gt;{C++ 基础}&lt;font/&gt;&lt;/a&gt;

&lt;a href = "http://www.cppblog.com/mzty/archive/2007/08/13/29922.html"&gt;&lt;font size = 5 color ="#00FFFF"&gt;{C++ 高级}&lt;font/&gt;&lt;/a&gt;

&lt;a href = "http://www.cppblog.com/mzty/archive/2007/04/16/22064.html"&gt;&lt;font size = 5 color ="#00FFFF"&gt;{C#界面，C++核心算法}&lt;font/&gt;&lt;/a&gt;

&lt;a href = "http://www.cppblog.com/mzty/archive/2007/03/04/19163.html"&gt;&lt;font size = 5 color ="#00FFFF"&gt;{设计模式}&lt;font/&gt;&lt;/a&gt;

&lt;a href = "
http://www.cppblog.com/mzty/archive/2007/03/04/19167.html"&gt;&lt;font size = 5 color ="#FF0000"&gt;{C#基础}&lt;font/&gt;&lt;/a&gt;





</description><language>zh-cn</language><lastBuildDate>Mon, 19 May 2008 18:30:46 GMT</lastBuildDate><pubDate>Mon, 19 May 2008 18:30:46 GMT</pubDate><ttl>60</ttl><item><title>随笔总结</title><link>http://www.cppblog.com/mzty/archive/2008/01/17/41318.html</link><dc:creator>梦在天涯</dc:creator><author>梦在天涯</author><pubDate>Thu, 17 Jan 2008 02:14:00 GMT</pubDate><guid>http://www.cppblog.com/mzty/archive/2008/01/17/41318.html</guid><wfw:comment>http://www.cppblog.com/mzty/comments/41318.html</wfw:comment><comments>http://www.cppblog.com/mzty/archive/2008/01/17/41318.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/mzty/comments/commentRss/41318.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mzty/services/trackbacks/41318.html</trackback:ping><description><![CDATA[<p><br>总结：<a href="http://www.cppblog.com/mzty/archive/2007/08/13/29922.html"><br><br>http://www.cppblog.com/mzty/archive/2007/08/13/29922.html</a>&nbsp; C++高级</p>
<p><a href="http://www.cppblog.com/mzty/archive/2007/03/02/19109.html">http://www.cppblog.com/mzty/archive/2007/03/02/19109.html</a>&nbsp; C++基础</p>
<p><a href="http://www.cppblog.com/mzty/archive/2007/04/16/22064.html">http://www.cppblog.com/mzty/archive/2007/04/16/22064.html</a>&nbsp; C#界面，C++核心算法</p>
<p><a href="http://www.cppblog.com/mzty/archive/2007/03/04/19163.html">http://www.cppblog.com/mzty/archive/2007/03/04/19163.html</a>&nbsp; 设计模式</p>
<p><a href="http://www.cppblog.com/mzty/archive/2007/03/29/20893.html">http://www.cppblog.com/mzty/archive/2007/03/29/20893.html</a>&nbsp; 64bit，FW3.0随笔分类 </p>
<p><a href="http://www.cppblog.com/mzty/archive/2007/03/29/20892.html">http://www.cppblog.com/mzty/archive/2007/03/29/20892.html</a>&nbsp; windows脚本技术</p>
<p><a href="http://www.cppblog.com/mzty/archive/2007/03/04/19167.html">http://www.cppblog.com/mzty/archive/2007/03/04/19167.html</a>&nbsp; C#基础</p><img src ="http://www.cppblog.com/mzty/aggbug/41318.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mzty/" target="_blank">梦在天涯</a> 2008-01-17 10:14 <a href="http://www.cppblog.com/mzty/archive/2008/01/17/41318.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>策略模式（policy）</title><link>http://www.cppblog.com/mzty/archive/2007/05/24/24774.html</link><dc:creator>梦在天涯</dc:creator><author>梦在天涯</author><pubDate>Thu, 24 May 2007 11:42:00 GMT</pubDate><guid>http://www.cppblog.com/mzty/archive/2007/05/24/24774.html</guid><wfw:comment>http://www.cppblog.com/mzty/comments/24774.html</wfw:comment><comments>http://www.cppblog.com/mzty/archive/2007/05/24/24774.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mzty/comments/commentRss/24774.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mzty/services/trackbacks/24774.html</trackback:ping><description><![CDATA[<br>一，策略模式<br>&nbsp;&nbsp; 在看《C++设计新思维》的时候，发现在一开始就大篇幅的介绍策略模式（policy），策略模式不属于经典设计模式中的一种，但是其实在我们日常的开发中是必不可少的。policy,策略，方针，这里的意思是指把复杂功能的类尽量的拆分为功能单一的简单类的组合，简单的类只负责单纯行为或结构的某一方面。增加程序库的弹性，可复用性，可扩展性。policy是一个虚拟的概念，他定义了某一类class的一些接口规范，并不与C++语法的关键字对应，只是一个抽象的概念。<br><br>二&nbsp; 实例1<br><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #008000">//</span><span style="COLOR: #008000">policy模式的常见使用实例smartptr，</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">template<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;T,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;template&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;CheckingPolicy,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;template&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;ThreadingModel<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;SmartPtr<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;:&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;CheckingPolicy</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">T</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;,&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;ThreadingModel</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">SmartPtr</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img id=Codehighlighter1_217_401_Open_Image onclick="this.style.display='none'; Codehighlighter1_217_401_Open_Text.style.display='none'; Codehighlighter1_217_401_Closed_Image.style.display='inline'; Codehighlighter1_217_401_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_217_401_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_217_401_Closed_Text.style.display='none'; Codehighlighter1_217_401_Open_Image.style.display='inline'; Codehighlighter1_217_401_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_217_401_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_217_401_Open_Text><span style="COLOR: #000000">{&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;T</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">operator</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">()<br><img id=Codehighlighter1_244_374_Open_Image onclick="this.style.display='none'; Codehighlighter1_244_374_Open_Text.style.display='none'; Codehighlighter1_244_374_Closed_Image.style.display='inline'; Codehighlighter1_244_374_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_244_374_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_244_374_Closed_Text.style.display='none'; Codehighlighter1_244_374_Open_Image.style.display='inline'; Codehighlighter1_244_374_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_244_374_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_244_374_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;typename&nbsp;ThreadingModel</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">SmartPtr</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">::Lock&nbsp;guard(</span><span style="COLOR: #000000">*</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CheckingPolicy</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">T</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">::Check(pointee_);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;pointee_;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;T</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pointee_;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;</span></div>
<br>三&nbsp; 实例二，比如说：我们定义一个policy，他是一个带有参数T的一个模版，他必须有一个Create函数，且返回T类型指针。对于这个定义，我们可以有不同的实现，从而满足不同用户的不同的需求。<br><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">template&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;T</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;OpNewCreator<br><img id=Codehighlighter1_39_93_Open_Image onclick="this.style.display='none'; Codehighlighter1_39_93_Open_Text.style.display='none'; Codehighlighter1_39_93_Closed_Image.style.display='inline'; Codehighlighter1_39_93_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_39_93_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_39_93_Closed_Text.style.display='none'; Codehighlighter1_39_93_Open_Image.style.display='inline'; Codehighlighter1_39_93_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_39_93_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_39_93_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;T</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;Create()<br><img id=Codehighlighter1_66_91_Open_Image onclick="this.style.display='none'; Codehighlighter1_66_91_Open_Text.style.display='none'; Codehighlighter1_66_91_Closed_Image.style.display='inline'; Codehighlighter1_66_91_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_66_91_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_66_91_Closed_Text.style.display='none'; Codehighlighter1_66_91_Open_Image.style.display='inline'; Codehighlighter1_66_91_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_66_91_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_66_91_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;T;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>template&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;T</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;MallocCreator<br><img id=Codehighlighter1_137_264_Open_Image onclick="this.style.display='none'; Codehighlighter1_137_264_Open_Text.style.display='none'; Codehighlighter1_137_264_Closed_Image.style.display='inline'; Codehighlighter1_137_264_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_137_264_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_137_264_Closed_Text.style.display='none'; Codehighlighter1_137_264_Open_Image.style.display='inline'; Codehighlighter1_137_264_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_137_264_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_137_264_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;T</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;Create()<br><img id=Codehighlighter1_164_262_Open_Image onclick="this.style.display='none'; Codehighlighter1_164_262_Open_Text.style.display='none'; Codehighlighter1_164_262_Closed_Image.style.display='inline'; Codehighlighter1_164_262_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_164_262_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_164_262_Closed_Text.style.display='none'; Codehighlighter1_164_262_Open_Image.style.display='inline'; Codehighlighter1_164_262_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_164_262_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_164_262_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;buf&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;std::malloc(</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(T));<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">buf)&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">(buf)&nbsp;T;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>template&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;T</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;PrototypeCreator<br><img id=Codehighlighter1_311_582_Open_Image onclick="this.style.display='none'; Codehighlighter1_311_582_Open_Text.style.display='none'; Codehighlighter1_311_582_Closed_Image.style.display='inline'; Codehighlighter1_311_582_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_311_582_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_311_582_Closed_Text.style.display='none'; Codehighlighter1_311_582_Open_Image.style.display='inline'; Codehighlighter1_311_582_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_311_582_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_311_582_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;PrototypeCreator(T</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pObj&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:pPrototype_(pObj)<br><img id=Codehighlighter1_374_375_Open_Image onclick="this.style.display='none'; Codehighlighter1_374_375_Open_Text.style.display='none'; Codehighlighter1_374_375_Closed_Image.style.display='inline'; Codehighlighter1_374_375_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_374_375_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_374_375_Closed_Text.style.display='none'; Codehighlighter1_374_375_Open_Image.style.display='inline'; Codehighlighter1_374_375_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_374_375_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_374_375_Open_Text><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;T</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;Create()<br><img id=Codehighlighter1_395_453_Open_Image onclick="this.style.display='none'; Codehighlighter1_395_453_Open_Text.style.display='none'; Codehighlighter1_395_453_Closed_Image.style.display='inline'; Codehighlighter1_395_453_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_395_453_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_395_453_Closed_Text.style.display='none'; Codehighlighter1_395_453_Open_Image.style.display='inline'; Codehighlighter1_395_453_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_395_453_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_395_453_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;pPrototype_&nbsp;</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">&nbsp;pPrototype_</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Clone()&nbsp;:&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_476_498_Open_Image onclick="this.style.display='none'; Codehighlighter1_476_498_Open_Text.style.display='none'; Codehighlighter1_476_498_Closed_Image.style.display='inline'; Codehighlighter1_476_498_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_476_498_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_476_498_Closed_Text.style.display='none'; Codehighlighter1_476_498_Open_Image.style.display='inline'; Codehighlighter1_476_498_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;T</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;GetPrototype()&nbsp;</span><span id=Codehighlighter1_476_498_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_476_498_Open_Text><span style="COLOR: #000000">{&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;pPrototype_;&nbsp;}</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_530_552_Open_Image onclick="this.style.display='none'; Codehighlighter1_530_552_Open_Text.style.display='none'; Codehighlighter1_530_552_Closed_Image.style.display='inline'; Codehighlighter1_530_552_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_530_552_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_530_552_Closed_Text.style.display='none'; Codehighlighter1_530_552_Open_Image.style.display='inline'; Codehighlighter1_530_552_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;SetPrototype(T</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pObj)&nbsp;</span><span id=Codehighlighter1_530_552_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_530_552_Open_Text><span style="COLOR: #000000">{&nbsp;pPrototype_&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;pObj;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;T</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pPrototype_;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">test&nbsp;class</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Widget<br><img id=Codehighlighter1_612_614_Open_Image onclick="this.style.display='none'; Codehighlighter1_612_614_Open_Text.style.display='none'; Codehighlighter1_612_614_Closed_Image.style.display='inline'; Codehighlighter1_612_614_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_612_614_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_612_614_Closed_Text.style.display='none'; Codehighlighter1_612_614_Open_Image.style.display='inline'; Codehighlighter1_612_614_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_612_614_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_612_614_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">调用方法一：</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">template&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;CreationPolicy</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;WidgetManager&nbsp;:&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;CreationPolicy<br><img id=Codehighlighter1_703_708_Open_Image onclick="this.style.display='none'; Codehighlighter1_703_708_Open_Text.style.display='none'; Codehighlighter1_703_708_Closed_Image.style.display='inline'; Codehighlighter1_703_708_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_703_708_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_703_708_Closed_Text.style.display='none'; Codehighlighter1_703_708_Open_Image.style.display='inline'; Codehighlighter1_703_708_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_703_708_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_703_708_Open_Text><span style="COLOR: #000000">{&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_723_787_Open_Image onclick="this.style.display='none'; Codehighlighter1_723_787_Open_Text.style.display='none'; Codehighlighter1_723_787_Closed_Image.style.display='inline'; Codehighlighter1_723_787_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_723_787_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_723_787_Closed_Text.style.display='none'; Codehighlighter1_723_787_Open_Image.style.display='inline'; Codehighlighter1_723_787_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_723_787_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_723_787_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>typedef&nbsp;WidgetManager</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;OpNewCreator</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Widget</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;MyWidgetMgr;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">调用方法二：因为一般Manager是特定于某一类的class，所以在Manager中就指定要处理的class类型。</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">template&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">template&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Created</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;CreationPolicy</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;WidgetManager&nbsp;:&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;CreationPolicy</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Widget</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img id=Codehighlighter1_959_964_Open_Image onclick="this.style.display='none'; Codehighlighter1_959_964_Open_Text.style.display='none'; Codehighlighter1_959_964_Closed_Image.style.display='inline'; Codehighlighter1_959_964_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_959_964_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_959_964_Closed_Text.style.display='none'; Codehighlighter1_959_964_Open_Image.style.display='inline'; Codehighlighter1_959_964_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_959_964_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_959_964_Open_Text><span style="COLOR: #000000">{&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_979_1051_Open_Image onclick="this.style.display='none'; Codehighlighter1_979_1051_Open_Text.style.display='none'; Codehighlighter1_979_1051_Closed_Image.style.display='inline'; Codehighlighter1_979_1051_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_979_1051_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_979_1051_Closed_Text.style.display='none'; Codehighlighter1_979_1051_Open_Image.style.display='inline'; Codehighlighter1_979_1051_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_979_1051_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_979_1051_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Application&nbsp;code</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">typedef&nbsp;WidgetManager</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">OpNewCreator</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;MyWidgetMgr;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<br>对于上面一个策略有3中不同的实现，从而就可以满足不同的客户的需求。<br>但是对于上面的使用，我们还可以有更好的修改：因为Policy的实现class一般会被继承，所以我们要考虑他的析构，一般的我们使析构函数virtual，但是这里会影响template的静态编译特性，影响效率，所以我们使用protected或private的析构函数，既不影响继承类对基类的析构，也不影响使用。<br>如修改如下：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">template&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;T</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;OpNewCreator<br><img id=Codehighlighter1_39_124_Open_Image onclick="this.style.display='none'; Codehighlighter1_39_124_Open_Text.style.display='none'; Codehighlighter1_39_124_Closed_Image.style.display='inline'; Codehighlighter1_39_124_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_39_124_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_39_124_Closed_Text.style.display='none'; Codehighlighter1_39_124_Open_Image.style.display='inline'; Codehighlighter1_39_124_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_39_124_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_39_124_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;T</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;Create()<br><img id=Codehighlighter1_66_89_Open_Image onclick="this.style.display='none'; Codehighlighter1_66_89_Open_Text.style.display='none'; Codehighlighter1_66_89_Closed_Image.style.display='inline'; Codehighlighter1_66_89_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_66_89_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_66_89_Closed_Text.style.display='none'; Codehighlighter1_66_89_Open_Image.style.display='inline'; Codehighlighter1_66_89_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_66_89_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_66_89_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;T;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">protected</span><span style="COLOR: #000000">:<br><img id=Codehighlighter1_121_122_Open_Image onclick="this.style.display='none'; Codehighlighter1_121_122_Open_Text.style.display='none'; Codehighlighter1_121_122_Closed_Image.style.display='inline'; Codehighlighter1_121_122_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_121_122_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_121_122_Closed_Text.style.display='none'; Codehighlighter1_121_122_Open_Image.style.display='inline'; Codehighlighter1_121_122_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">OpNewCreator()&nbsp;</span><span id=Codehighlighter1_121_122_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_121_122_Open_Text><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;</span></div>
<br>我们还可以修改上面的manger，实现creator policy的switch：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">template&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">template&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;CreationPolicy</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;WidgetManager&nbsp;:&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;CreationPolicy</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Widget</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img id=Codehighlighter1_101_291_Open_Image onclick="this.style.display='none'; Codehighlighter1_101_291_Open_Text.style.display='none'; Codehighlighter1_101_291_Closed_Image.style.display='inline'; Codehighlighter1_101_291_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_101_291_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_101_291_Closed_Text.style.display='none'; Codehighlighter1_101_291_Open_Image.style.display='inline'; Codehighlighter1_101_291_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_101_291_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_101_291_Open_Text><span style="COLOR: #000000">{&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;SwitchPrototype(Widget</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pNewPrototype)<br><img id=Codehighlighter1_154_289_Open_Image onclick="this.style.display='none'; Codehighlighter1_154_289_Open_Text.style.display='none'; Codehighlighter1_154_289_Closed_Image.style.display='inline'; Codehighlighter1_154_289_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_154_289_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_154_289_Closed_Text.style.display='none'; Codehighlighter1_154_289_Open_Image.style.display='inline'; Codehighlighter1_154_289_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_154_289_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_154_289_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CreationPolicy</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Widget</span><span style="COLOR: #000000">&gt;&amp;</span><span style="COLOR: #000000">&nbsp;myPolicy&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;myPolicy.GetPrototype();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myPolicy.SetPrototype(pNewPrototype);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;</span></div>
<br><br>四 policy 模式对我们创建可复用，可扩展的库的开发有非常重要的作用，是OO的基本的设原则式之一。<br><br>
<img src ="http://www.cppblog.com/mzty/aggbug/24774.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mzty/" target="_blank">梦在天涯</a> 2007-05-24 19:42 <a href="http://www.cppblog.com/mzty/archive/2007/05/24/24774.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设计模式随笔分类</title><link>http://www.cppblog.com/mzty/archive/2007/03/04/19163.html</link><dc:creator>梦在天涯</dc:creator><author>梦在天涯</author><pubDate>Sun, 04 Mar 2007 03:31:00 GMT</pubDate><guid>http://www.cppblog.com/mzty/archive/2007/03/04/19163.html</guid><wfw:comment>http://www.cppblog.com/mzty/comments/19163.html</wfw:comment><comments>http://www.cppblog.com/mzty/archive/2007/03/04/19163.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/mzty/comments/commentRss/19163.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mzty/services/trackbacks/19163.html</trackback:ping><description><![CDATA[<strong><font size=4>设计模式：</font> </strong><a id=viewpost1_TitleUrl href="http://www.cppblog.com/mzty/archive/2005/12/30/2282.html"><font color=#223355><br><br>设计模式概念</font> </a><br><br><a id=CategoryEntryList1_EntryStoryList_Entries_ctl27_TitleUrl href="http://www.cppblog.com/mzty/archive/2006/01/03/2372.html"><font color=#223355>模式趣解</font> </a><br><br><a id=CategoryEntryList1_EntryStoryList_Entries_ctl26_TitleUrl href="http://www.cppblog.com/mzty/archive/2006/01/03/2376.html"><font color=#223355>23种经典设计模式</font> </a><br><br><a id=CategoryEntryList1_EntryStoryList_Entries_ctl00_TitleUrl href="http://www.cppblog.com/mzty/archive/2006/05/25/7640.html"><font color=#223355>MFC与设计模式</font> </a><br><br><a href="http://www.cppblog.com/mzty/archive/2006/05/09/6805.html"><font color=#223355>.net中更好的使用设计模式的DLL(Commonly Used .NET Coding Patterns in CodeDom)</font> <br></a><br><font color=#000000 size=4><strong>创建型：</strong> </font><br><br><a id=CategoryEntryList1_EntryStoryList_Entries_ctl25_TitleUrl href="http://www.cppblog.com/mzty/archive/2006/01/03/2377.html"><font color=#223355>模式设计c#－－创建型－－factory method</font> </a><br><br><a id=CategoryEntryList1_EntryStoryList_Entries_ctl24_TitleUrl href="http://www.cppblog.com/mzty/archive/2006/01/03/2379.html"><font color=#223355>模式设计c#－－创建型－－AbstractFactory</font> </a><br><br><a id=CategoryEntryList1_EntryStoryList_Entries_ctl23_TitleUrl href="http://www.cppblog.com/mzty/archive/2006/01/03/2381.html"><font color=#223355>模式设计c#－－创建型－－Builder</font> </a><br><br><a id=CategoryEntryList1_EntryStoryList_Entries_ctl22_TitleUrl href="http://www.cppblog.com/mzty/archive/2006/01/03/2383.html"><font color=#223355>模式设计c#－－创建型－－Prototype</font> </a><br><br><a id=CategoryEntryList1_EntryStoryList_Entries_ctl21_TitleUrl href="http://www.cppblog.com/mzty/archive/2006/01/03/2384.html"><font color=#223355>模式设计c#－－创建型－－Singleton</font> </a><br><br><font size=4><strong>结构型：<br></strong></font><br><a id=CategoryEntryList1_EntryStoryList_Entries_ctl20_TitleUrl href="http://www.cppblog.com/mzty/archive/2006/01/03/2385.html"><font color=#223355>模式设计c#－－结构型－－Adapter</font> </a><br><br><a id=CategoryEntryList1_EntryStoryList_Entries_ctl19_TitleUrl href="http://www.cppblog.com/mzty/archive/2006/01/03/2386.html"><font color=#223355>模式设计c#－－结构型－－Bridge</font> </a><br><br><a id=CategoryEntryList1_EntryStoryList_Entries_ctl18_TitleUrl href="http://www.cppblog.com/mzty/archive/2006/01/03/2387.html"><font color=#223355>模式设计c#－－结构型－－composite</font> </a><br><br><a id=CategoryEntryList1_EntryStoryList_Entries_ctl17_TitleUrl href="http://www.cppblog.com/mzty/archive/2006/01/03/2388.html"><font color=#223355>模式设计c#－－结构型－－decorator</font> </a><br><br><a id=CategoryEntryList1_EntryStoryList_Entries_ctl16_TitleUrl href="http://www.cppblog.com/mzty/archive/2006/01/03/2389.html"><font color=#223355>模式设计c#－－结构型－－facade</font> </a><br><br><a id=CategoryEntryList1_EntryStoryList_Entries_ctl15_TitleUrl href="http://www.cppblog.com/mzty/archive/2006/01/03/2390.html"><font color=#223355>模式设计c#－－结构型－－flyweight</font> </a><br><br><a id=CategoryEntryList1_EntryStoryList_Entries_ctl14_TitleUrl href="http://www.cppblog.com/mzty/archive/2006/01/03/2391.html"><font color=#223355>模式设计c#－－结构型－－proxy</font> </a><br><br><font size=4><strong>行为型：</strong> </font><br><br><a id=CategoryEntryList1_EntryStoryList_Entries_ctl13_TitleUrl href="http://www.cppblog.com/mzty/archive/2006/01/03/2392.html"><font color=#223355>模式设计c#－－行为型－－interpreter</font> </a><br><br><a id=CategoryEntryList1_EntryStoryList_Entries_ctl12_TitleUrl href="http://www.cppblog.com/mzty/archive/2006/01/03/2393.html"><font color=#223355>模式设计c#－－行为型－－templetemethod</font> </a><br><br><a id=CategoryEntryList1_EntryStoryList_Entries_ctl11_TitleUrl href="http://www.cppblog.com/mzty/archive/2006/01/03/2394.html"><font color=#223355>模式设计c#－－行为型－－Chain of Responsibility</font> </a><br><br><a id=CategoryEntryList1_EntryStoryList_Entries_ctl10_TitleUrl href="http://www.cppblog.com/mzty/archive/2006/01/03/2395.html"><font color=#223355>模式设计c#－－行为型－－command</font> </a><br><br><a id=CategoryEntryList1_EntryStoryList_Entries_ctl09_TitleUrl href="http://www.cppblog.com/mzty/archive/2006/01/03/2396.html"><font color=#223355>模式设计c#－－行为型－－iterator</font> </a><br><br><a id=CategoryEntryList1_EntryStoryList_Entries_ctl08_TitleUrl href="http://www.cppblog.com/mzty/archive/2006/01/03/2397.html"><font color=#223355>模式设计c#－－行为型－－mediator</font> </a><br><br><a id=CategoryEntryList1_EntryStoryList_Entries_ctl07_TitleUrl href="http://www.cppblog.com/mzty/archive/2006/01/03/2398.html"><font color=#223355>模式设计c#－－行为型－－menento</font> </a><br><br><a id=CategoryEntryList1_EntryStoryList_Entries_ctl06_TitleUrl href="http://www.cppblog.com/mzty/archive/2006/01/03/2399.html"><font color=#223355>模式设计c#－－行为型－－observer</font> </a><br><br><a id=CategoryEntryList1_EntryStoryList_Entries_ctl05_TitleUrl href="http://www.cppblog.com/mzty/archive/2006/01/03/2400.html"><font color=#223355>模式设计c#－－行为型－－state </font></a><br><br><a id=CategoryEntryList1_EntryStoryList_Entries_ctl04_TitleUrl href="http://www.cppblog.com/mzty/archive/2006/01/03/2401.html"><font color=#223355>模式设计c#－－行为型－－strategy</font> </a><br><br><a id=CategoryEntryList1_EntryStoryList_Entries_ctl03_TitleUrl href="http://www.cppblog.com/mzty/archive/2006/01/03/2402.html"><font color=#223355>模式设计c#－－行为型－－visitor</font> </a><br><br><br>其他的设计模式：<br><a id=_f7463ca6fb4_HomePageDays_DaysList_ctl01_DayItem_DayList_ctl01_TitleUrl href="http://www.cppblog.com/mzty/archive/2007/05/24/24774.html"><font color=#223355>策略模式（policy）</font></a><br><img src ="http://www.cppblog.com/mzty/aggbug/19163.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mzty/" target="_blank">梦在天涯</a> 2007-03-04 11:31 <a href="http://www.cppblog.com/mzty/archive/2007/03/04/19163.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MFC与设计模式</title><link>http://www.cppblog.com/mzty/archive/2006/05/25/7640.html</link><dc:creator>梦在天涯</dc:creator><author>梦在天涯</author><pubDate>Thu, 25 May 2006 05:39:00 GMT</pubDate><guid>http://www.cppblog.com/mzty/archive/2006/05/25/7640.html</guid><wfw:comment>http://www.cppblog.com/mzty/comments/7640.html</wfw:comment><comments>http://www.cppblog.com/mzty/archive/2006/05/25/7640.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mzty/comments/commentRss/7640.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mzty/services/trackbacks/7640.html</trackback:ping><description><![CDATA[
		<p>This main topic of this article is to show how patterns are used in MFC. We will be seeing the usage of three patterns in MFC library.</p>
		<h3>Creational : Singleton Pattern</h3>
		<p>First step in any MFC application is the creation of application object (object of class derived from <code>CWinApp</code>). There should be only one application object in an instance of MFC application. <code>CWinApp</code> is designed to make sure that only application object is present in a given instance. <code>CWinApp</code> and its descendants are called Singleton Classes. <i>A class (<code>CWinApp</code> or its descendant) that assures a maximum of ONE object of its type at a given time and provides a global access point (<code>AfxGetApp()</code> method) to this object is a Singleton class.</i></p>
		<p>As this principle is applied over and over again to solve recurring object "creational" problems, this becomes a pattern. Singleton Pattern ensures that a class only has one instance and provides a global access point it. The article <a href="http://www.codeproject.com/tips/Singleton.asp">Creating Singleton Objects using Visual C++</a> talks about different approaches for implementing Singletons.</p>
		<h3>Structural : Bridge Pattern</h3>
		<p>Bridge Pattern is all about decoupling an abstraction (interface) from its implementation so that the two can vary independently. In MFC, the process of storing/retrieving an object to/from a persistence mechanism (like a file) is called Serialization. MFC uses the Bridge Pattern to implement Serialization. <code>CArchive</code> and <code>CFile</code> classes implement object Serialization. CArchive class provides the interface for writing/reading an object to/from a persistence mechanism whereas the <code>CFile</code> and its sub classes provides implementation for different persistence mechanisms such as memory, disk file, sockets etc.</p>
		<p>A <code>CArchive</code> object is configured with an object of class <code>CFile</code> (or a derived class) during its construction, from which it obtains the necessary information for serialization, including the filename and type of the requested operation (a read or write). Client performing the Serialization operation can use CArchive object without regarding the persistence mechanism implemented by <code>CFile</code> classes.</p>
		<p>The article <a href="http://www.codeproject.com/tips/bridge.asp">Bridge Pattern - Bridging the gap between Interface and Implementation</a> talks about Bridge pattern in detail.</p>
		<h3>Behavioral : Observer Pattern</h3>
		<p>The Observer Pattern is intended to <i>"Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically"</i>. An object that is subjected to change is called a <b>Subject</b> and an object that depends on the Subject's state is called an <b>Observer</b>.</p>
		<p>MFC uses a Document/View variant of the Observer Pattern. MFC's famous Document/View architecture uses this variant. A document contains the data object and acts as a Subject. A view is a window object through which the user updates the document and it acts as an Observer. A document can have multiple views. Whenever the data in the document is changed by one of the views, it updates the document by calling <code>UpdateAllViews</code> method, with optional hint about the modification. To inform about the change to other views, the document object calls <code>OnUpdate</code> method for each view attached to it (except the view that called <code>UpdateAllViews</code>). Derived view classes can override the OnUpdate method and update themselves by querying the data from the document.</p>
		<p>The article <a href="http://www.codeproject.com/tips/observer.asp">Applying Observer Pattern in C++ Applications</a> talks about Observer pattern in detail.</p>
		<h2>Summary</h2>
		<p>Design Pattern provides a common language for designers and helps them to decompose systems into a set of cooperating classes and objects. They provide proven design solution to recurring problems. In this article, I have introduced the design pattern and how MFC is using some of the patterns in its design. We can easily find more and more patterns when we dig into MFC and its classes.</p>
		<!-- Article Ends -->
<img src ="http://www.cppblog.com/mzty/aggbug/7640.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mzty/" target="_blank">梦在天涯</a> 2006-05-25 13:39 <a href="http://www.cppblog.com/mzty/archive/2006/05/25/7640.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>接口模式 -- 接口中为什么不能包含delegate</title><link>http://www.cppblog.com/mzty/archive/2006/05/18/7352.html</link><dc:creator>梦在天涯</dc:creator><author>梦在天涯</author><pubDate>Thu, 18 May 2006 07:21:00 GMT</pubDate><guid>http://www.cppblog.com/mzty/archive/2006/05/18/7352.html</guid><wfw:comment>http://www.cppblog.com/mzty/comments/7352.html</wfw:comment><comments>http://www.cppblog.com/mzty/archive/2006/05/18/7352.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mzty/comments/commentRss/7352.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mzty/services/trackbacks/7352.html</trackback:ping><description><![CDATA[  接口模式 : interface and   abstract calss<br /><br /> 接口可以包含function, property, index, event ,但是不能包含 delegate:<br /> :因为一个接口声明规范了成员,不是类型. delegate引入一个新的类型,而event引入的是一个新的成员.<img src ="http://www.cppblog.com/mzty/aggbug/7352.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mzty/" target="_blank">梦在天涯</a> 2006-05-18 15:21 <a href="http://www.cppblog.com/mzty/archive/2006/05/18/7352.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>.net中更好的使用设计模式的DLL(Commonly Used .NET Coding Patterns in CodeDom)(转)</title><link>http://www.cppblog.com/mzty/archive/2006/05/09/6805.html</link><dc:creator>梦在天涯</dc:creator><author>梦在天涯</author><pubDate>Tue, 09 May 2006 01:46:00 GMT</pubDate><guid>http://www.cppblog.com/mzty/archive/2006/05/09/6805.html</guid><wfw:comment>http://www.cppblog.com/mzty/comments/6805.html</wfw:comment><comments>http://www.cppblog.com/mzty/archive/2006/05/09/6805.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mzty/comments/commentRss/6805.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mzty/services/trackbacks/6805.html</trackback:ping><description><![CDATA[
		<li>
				<a href="http://www.codeproject.com/csharp/codedompatterns/CodeDomPatterns_bin.zip">
						<font style="BACKGROUND-COLOR: #ffffff" color="#ff1493">Download binary - 263 Kb</font>
				</a>
				<font style="BACKGROUND-COLOR: #ffffff" color="#ff1493">
				</font>
		</li>
		<li>
				<a href="http://www.codeproject.com/csharp/codedompatterns/CodeDomPatterns_src.zip">
						<font style="BACKGROUND-COLOR: #ffffff" color="#ff1493">Download source - 275 Kb</font>
				</a>
				<h2>Table of contents</h2>
				<ul>
						<li>
								<a href="http://www.codeproject.com/csharp/codedompatterns.asp#Introduction">
										<font color="#ff1493">Introduction</font>
								</a>
								<font color="#ff1493">
								</font>
						</li>
						<li>
								<a href="http://www.codeproject.com/csharp/codedompatterns.asp#CodePatternArgumentAssertStatements">
										<font color="#ff1493">Argument Assertion patterns</font>
								</a>
								<font color="#ff1493">
								</font>
						</li>
						<li>
								<a href="http://www.codeproject.com/csharp/codedompatterns.asp#CodePatternAsyncOperation">
										<font color="#ff1493">The Asynchronous Operation pattern</font>
								</a>
								<font color="#ff1493">
								</font>
						</li>
						<li>
								<a href="http://www.codeproject.com/csharp/codedompatterns.asp#CodePatternBeginEnd">
										<font color="#ff1493">The BeginProcess/EndProcess pattern</font>
								</a>
								<font color="#ff1493">
								</font>
						</li>
						<li>
								<a href="http://www.codeproject.com/csharp/codedompatterns.asp#CodePatternBinaryOperatorExpression">
										<font color="#ff1493">Binary Operator patterns</font>
								</a>
								<font color="#ff1493">
								</font>
						</li>
						<li>
								<a href="http://www.codeproject.com/csharp/codedompatterns.asp#CodePatternCompoundAssignStatement">
										<font color="#ff1493">Compound Assignment patterns</font>
								</a>
								<font color="#ff1493">
								</font>
						</li>
						<li>
								<a href="http://www.codeproject.com/csharp/codedompatterns.asp#CodePatternCursorLock">
										<font color="#ff1493">The Cursor Lock pattern</font>
								</a>
								<font color="#ff1493">
								</font>
						</li>
						<li>
								<a href="http://www.codeproject.com/csharp/codedompatterns.asp#CodePatternCustomAttributeDeclaration">
										<font color="#ff1493">The Custom Attribute pattern</font>
								</a>
								<font color="#ff1493">
								</font>
						</li>
						<li>
								<a href="http://www.codeproject.com/csharp/codedompatterns.asp#CodePatternCustomExceptionDeclaration">
										<font color="#ff1493">The Custom Exception pattern</font>
								</a>
								<font color="#ff1493">
								</font>
						</li>
						<li>
								<a href="http://www.codeproject.com/csharp/codedompatterns.asp#CodePatternDelegate">
										<font color="#ff1493">The Delegate pattern</font>
								</a>
								<font color="#ff1493">
								</font>
						</li>
						<li>
								<a href="http://www.codeproject.com/csharp/codedompatterns.asp#CodePatternDisposableType">
										<font color="#ff1493">The Disposable Type pattern</font>
								</a>
								<font color="#ff1493">
								</font>
						</li>
						<li>
								<a href="http://www.codeproject.com/csharp/codedompatterns.asp#CodePatternEvent">
										<font color="#ff1493">The Event pattern</font>
								</a>
								<font color="#ff1493">
								</font>
						</li>
						<li>
								<a href="http://www.codeproject.com/csharp/codedompatterns.asp#CodePatternFlags">
										<font color="#ff1493">The Flags pattern</font>
								</a>
								<font color="#ff1493">
								</font>
						</li>
						<li>
								<a href="http://www.codeproject.com/csharp/codedompatterns.asp#CodePatternForEach">
										<font color="#ff1493">The For Each pattern</font>
								</a>
								<font color="#ff1493">
								</font>
						</li>
						<li>
								<a href="http://www.codeproject.com/csharp/codedompatterns.asp#CodePatternGetField">
										<font color="#ff1493">The Get Property/Field pattern</font>
								</a>
								<font color="#ff1493">
								</font>
						</li>
						<li>
								<a href="http://www.codeproject.com/csharp/codedompatterns.asp#CodePatternIsInstExpression">
										<font color="#ff1493">The Is Instance Of pattern</font>
								</a>
								<font color="#ff1493">
								</font>
						</li>
						<li>
								<a href="http://www.codeproject.com/csharp/codedompatterns.asp#CodePatternLock">
										<font color="#ff1493">The Lock pattern</font>
								</a>
								<font color="#ff1493">
								</font>
						</li>
						<li>
								<a href="http://www.codeproject.com/csharp/codedompatterns.asp#CodePatternObserver">
										<font color="#ff1493">The Observer pattern</font>
								</a>
								<font color="#ff1493">
								</font>
						</li>
						<li>
								<a href="http://www.codeproject.com/csharp/codedompatterns.asp#CodePatternSingleton">
										<font color="#ff1493">The Singleton pattern</font>
								</a>
								<font color="#ff1493">
								</font>
						</li>
						<li>
								<a href="http://www.codeproject.com/csharp/codedompatterns.asp#CodePatternTypedCollection">
										<font color="#ff1493">The Typed Collection pattern</font>
								</a>
								<font color="#ff1493">
								</font>
						</li>
						<li>
								<a href="http://www.codeproject.com/csharp/codedompatterns.asp#CodePatternUnaryOperatorExpression">
										<font color="#ff1493">Unary Operator patterns</font>
								</a>
								<font color="#ff1493">
								</font>
						</li>
						<li>
								<a href="http://www.codeproject.com/csharp/codedompatterns.asp#CodePatternUsing">
										<font color="#ff1493">The Using pattern</font>
								</a>
								<font color="#ff1493">
								</font>
						</li>
						<li>
								<a href="http://www.codeproject.com/csharp/codedompatterns.asp#CodeXmlCommentStatements">
										<font color="#ff1493">XML Comment patterns</font>
								</a>
								<font color="#ff1493">
								</font>
						</li>
						<li>
								<a href="http://www.codeproject.com/csharp/codedompatterns.asp#History">
										<font color="#ff1493">History</font>
								</a>
								<font color="#ff1493">
								</font>
						</li>
						<li>
								<a href="http://www.codeproject.com/csharp/codedompatterns.asp#License">
										<font color="#ff1493">License</font>
								</a>
						</li>
				</ul>
				<h2>   原文地址:http://www.codeproject.com/csharp/codedompatterns.asp<br /></h2>
		</li>
		<!-- Article Ends -->
<img src ="http://www.cppblog.com/mzty/aggbug/6805.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mzty/" target="_blank">梦在天涯</a> 2006-05-09 09:46 <a href="http://www.cppblog.com/mzty/archive/2006/05/09/6805.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>模式设计c#－－行为型－－visitor</title><link>http://www.cppblog.com/mzty/archive/2006/01/03/2402.html</link><dc:creator>梦在天涯</dc:creator><author>梦在天涯</author><pubDate>Tue, 03 Jan 2006 08:18:00 GMT</pubDate><guid>http://www.cppblog.com/mzty/archive/2006/01/03/2402.html</guid><wfw:comment>http://www.cppblog.com/mzty/comments/2402.html</wfw:comment><comments>http://www.cppblog.com/mzty/archive/2006/01/03/2402.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/mzty/comments/commentRss/2402.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mzty/services/trackbacks/2402.html</trackback:ping><description><![CDATA[
		<table width="70%" align="center" border="2">
				<tbody>
						<tr>
								<td>名称</td>
								<td>
										<b>Visitor</b>
								</td>
						</tr>
						<tr>
								<td>结构</td>
								<td>
										<img height="417" alt="r_visitor.bmp" src="http://www.cppblog.com/images/cppblog_com/mzty/713/r_visitor.bmp" width="536" border="0" />
								</td>
						</tr>
						<tr>
								<td>意图</td>
								<td>表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。</td>
						</tr>
						<tr>
								<td>适用性</td>
								<td>
										<ul>
												<li>一个对象结构包含很多类对象，它们有不同的接口，而你想对这些对象实施一些依赖于其具体类的操作。 
</li>
												<li>需要对一个对象结构中的对象进行很多不同的并且不相关的操作，而你想避免让这些操作“污染”这些对象的类。Vi s i t o r 使得你可以将相关的操作集中起来定义在一个类中。当该对象结构被很多应用共享时，用Vi s i t o r 模式让每个应用仅包含需要用到的操作。 
</li>
												<li>定义对象结构的类很少改变，但经常需要在此结构上定义新的操作。改变对象结构类需要重定义对所有访问者的接口，这可能需要很大的代价。如果对象结构类经常改变，那么可能还是在这些类中定义这些操作较好。 </li>
										</ul>
								</td>
						</tr>
						<tr>
								<td>
								</td>
								<td>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<br />
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">
						<table cellspacing="0" cellpadding="0" width="100%" bgcolor="#fffaef" border="0">
								<tbody>
										<tr>
												<td>
														<div class="sourcecode">
																<font color="green">// Visitor pattern -- Structural example </font>
														</div>
												</td>
										</tr>
								</tbody>
								<tbody id="Structure">
										<tr>
												<td>
														<br />
														<div class="sourcecode">
																<font color="blue">using</font> System;<br /><font color="blue">using</font> System.Collections;<br /><br /><font color="blue">namespace</font> DoFactory.GangOfFour.Visitor.Structural<br />{<br />  <br />  <font color="green">// MainApp test application </font><br /><br />  <font color="blue">class</font> MainApp<br />  {<br />    <font color="blue">static</font><font color="blue">void</font> Main()<br />    {<br />      <font color="green">// Setup structure </font><br />      ObjectStructure o = <font color="blue">new</font> ObjectStructure();<br />      o.Attach(<font color="blue">new</font> ConcreteElementA());<br />      o.Attach(<font color="blue">new</font> ConcreteElementB());<br /><br />      <font color="green">// Create visitor objects </font><br />      ConcreteVisitor1 v1 = <font color="blue">new</font> ConcreteVisitor1();<br />      ConcreteVisitor2 v2 = <font color="blue">new</font> ConcreteVisitor2();<br /><br />      <font color="green">// Structure accepting visitors </font><br />      o.Accept(v1);<br />      o.Accept(v2);<br /><br />      <font color="green">// Wait <font color="blue"></font><font color="green">for</font> user </font><br />      Console.Read();<br />    }<br />  }<br /><br />  <font color="green">// "Visitor" </font><br /><br />  <font color="blue">abstract</font><font color="blue">class</font> Visitor<br />  {<br />    <font color="blue">public</font><font color="blue">abstract</font><font color="blue">void</font> VisitConcreteElementA(<br />      ConcreteElementA concreteElementA);<br />    <font color="blue">public</font><font color="blue">abstract</font><font color="blue">void</font> VisitConcreteElementB(<br />      ConcreteElementB concreteElementB);<br />  }<br /><br />  <font color="green">// "ConcreteVisitor1" </font><br /><br />  <font color="blue">class</font> ConcreteVisitor1 : Visitor<br />  {<br />    <font color="blue">public</font><font color="blue">override</font><font color="blue">void</font> VisitConcreteElementA(<br />      ConcreteElementA concreteElementA)<br />    {<br />      Console.WriteLine("{0} visited by {1}",<br />        concreteElementA.GetType().Name, <font color="blue">this</font>.GetType().Name);<br />    }<br /><br />    <font color="blue">public</font><font color="blue">override</font><font color="blue">void</font> VisitConcreteElementB(<br />      ConcreteElementB concreteElementB)<br />    {<br />      Console.WriteLine("{0} visited by {1}",<br />        concreteElementB.GetType().Name, <font color="blue">this</font>.GetType().Name);<br />    }<br />  }<br /><br />  <font color="green">// "ConcreteVisitor2" </font><br /><br />  <font color="blue">class</font> ConcreteVisitor2 : Visitor<br />  {<br />    <font color="blue">public</font><font color="blue">override</font><font color="blue">void</font> VisitConcreteElementA(<br />      ConcreteElementA concreteElementA)<br />    {<br />      Console.WriteLine("{0} visited by {1}",<br />        concreteElementA.GetType().Name, <font color="blue">this</font>.GetType().Name);<br />    }<br /><br />    <font color="blue">public</font><font color="blue">override</font><font color="blue">void</font> VisitConcreteElementB(<br />      ConcreteElementB concreteElementB)<br />    {<br />      Console.WriteLine("{0} visited by {1}",<br />        concreteElementB.GetType().Name, <font color="blue">this</font>.GetType().Name);<br />    }<br />  }<br /><br />  <font color="green">// "Element" </font><br /><br />  <font color="blue">abstract</font><font color="blue">class</font> Element<br />  {<br />    <font color="blue">public</font><font color="blue">abstract</font><font color="blue">void</font> Accept(Visitor visitor);<br />  }<br /><br />  <font color="green">// "ConcreteElementA" </font><br /><br />  <font color="blue">class</font> ConcreteElementA : Element<br />  {<br />    <font color="blue">public</font><font color="blue">override</font><font color="blue">void</font> Accept(Visitor visitor)<br />    {<br />      visitor.VisitConcreteElementA(<font color="blue">this</font>);<br />    }<br /><br />    <font color="blue">public</font><font color="blue">void</font> OperationA()<br />    {<br />    }<br />  }<br /><br />  <font color="green">// "ConcreteElementB" </font><br /><br />  <font color="blue">class</font> ConcreteElementB : Element<br />  {<br />    <font color="blue">public</font><font color="blue">override</font><font color="blue">void</font> Accept(Visitor visitor)<br />    {<br />      visitor.VisitConcreteElementB(<font color="blue">this</font>);<br />    }<br /><br />    <font color="blue">public</font><font color="blue">void</font> OperationB()<br />    {<br />    }<br />  }<br /><br />  <font color="green">// "ObjectStructure" </font><br /><br />  <font color="blue">class</font> ObjectStructure<br />  {<br />    <font color="blue">private</font> ArrayList elements = <font color="blue">new</font> ArrayList();<br /><br />    <font color="blue">public</font><font color="blue">void</font> Attach(Element element)<br />    {<br />      elements.Add(element);<br />    }<br /><br />    <font color="blue">public</font><font color="blue">void</font> Detach(Element element)<br />    {<br />      elements.Remove(element);<br />    }<br /><br />    <font color="blue">public</font><font color="blue">void</font> Accept(Visitor visitor)<br />    {<br />      <font color="blue">foreach</font> (Element e <font color="blue">in</font> elements)<br />      {<br />        e.Accept(visitor);<br />      }<br />    }<br />  }<br />}<br /></div>
												</td>
										</tr>
								</tbody>
						</table>
				</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
		</div>
		<font face="Arial" size="2">Output</font>
		<table cellspacing="0" cellpadding="0" width="100%" bgcolor="black" border="0">
				<tbody>
						<tr>
								<td>
										<div class="output">
												<font color="#ff1493">ConcreteElementA visited by ConcreteVisitor1<br />ConcreteElementB visited by ConcreteVisitor1<br />ConcreteElementA visited by ConcreteVisitor2<br />ConcreteElementB visited by ConcreteVisitor2</font>
										</div>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.cppblog.com/mzty/aggbug/2402.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mzty/" target="_blank">梦在天涯</a> 2006-01-03 16:18 <a href="http://www.cppblog.com/mzty/archive/2006/01/03/2402.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>模式设计c#－－行为型－－strategy</title><link>http://www.cppblog.com/mzty/archive/2006/01/03/2401.html</link><dc:creator>梦在天涯</dc:creator><author>梦在天涯</author><pubDate>Tue, 03 Jan 2006 08:17:00 GMT</pubDate><guid>http://www.cppblog.com/mzty/archive/2006/01/03/2401.html</guid><wfw:comment>http://www.cppblog.com/mzty/comments/2401.html</wfw:comment><comments>http://www.cppblog.com/mzty/archive/2006/01/03/2401.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mzty/comments/commentRss/2401.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mzty/services/trackbacks/2401.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 名称																		Strategy																												结构																																														意图								定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。					...&nbsp;&nbsp;<a href='http://www.cppblog.com/mzty/archive/2006/01/03/2401.html'>阅读全文</a><img src ="http://www.cppblog.com/mzty/aggbug/2401.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mzty/" target="_blank">梦在天涯</a> 2006-01-03 16:17 <a href="http://www.cppblog.com/mzty/archive/2006/01/03/2401.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>模式设计c#－－行为型－－state </title><link>http://www.cppblog.com/mzty/archive/2006/01/03/2400.html</link><dc:creator>梦在天涯</dc:creator><author>梦在天涯</author><pubDate>Tue, 03 Jan 2006 08:15:00 GMT</pubDate><guid>http://www.cppblog.com/mzty/archive/2006/01/03/2400.html</guid><wfw:comment>http://www.cppblog.com/mzty/comments/2400.html</wfw:comment><comments>http://www.cppblog.com/mzty/archive/2006/01/03/2400.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/mzty/comments/commentRss/2400.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mzty/services/trackbacks/2400.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 名称																		State																												结构																																														意图								允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。																				适...&nbsp;&nbsp;<a href='http://www.cppblog.com/mzty/archive/2006/01/03/2400.html'>阅读全文</a><img src ="http://www.cppblog.com/mzty/aggbug/2400.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mzty/" target="_blank">梦在天涯</a> 2006-01-03 16:15 <a href="http://www.cppblog.com/mzty/archive/2006/01/03/2400.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>模式设计c#－－行为型－－observer</title><link>http://www.cppblog.com/mzty/archive/2006/01/03/2399.html</link><dc:creator>梦在天涯</dc:creator><author>梦在天涯</author><pubDate>Tue, 03 Jan 2006 08:13:00 GMT</pubDate><guid>http://www.cppblog.com/mzty/archive/2006/01/03/2399.html</guid><wfw:comment>http://www.cppblog.com/mzty/comments/2399.html</wfw:comment><comments>http://www.cppblog.com/mzty/archive/2006/01/03/2399.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mzty/comments/commentRss/2399.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mzty/services/trackbacks/2399.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 名称																		Observer																												结构																																														意图								定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。					...&nbsp;&nbsp;<a href='http://www.cppblog.com/mzty/archive/2006/01/03/2399.html'>阅读全文</a><img src ="http://www.cppblog.com/mzty/aggbug/2399.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mzty/" target="_blank">梦在天涯</a> 2006-01-03 16:13 <a href="http://www.cppblog.com/mzty/archive/2006/01/03/2399.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>模式设计c#－－行为型－－menento</title><link>http://www.cppblog.com/mzty/archive/2006/01/03/2398.html</link><dc:creator>梦在天涯</dc:creator><author>梦在天涯</author><pubDate>Tue, 03 Jan 2006 08:12:00 GMT</pubDate><guid>http://www.cppblog.com/mzty/archive/2006/01/03/2398.html</guid><wfw:comment>http://www.cppblog.com/mzty/comments/2398.html</wfw:comment><comments>http://www.cppblog.com/mzty/archive/2006/01/03/2398.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/mzty/comments/commentRss/2398.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mzty/services/trackbacks/2398.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 名称																		Memento																												结构																																														意图								在不破坏封装性的前提下，捕获一个对象的内部状态，并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。...&nbsp;&nbsp;<a href='http://www.cppblog.com/mzty/archive/2006/01/03/2398.html'>阅读全文</a><img src ="http://www.cppblog.com/mzty/aggbug/2398.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mzty/" target="_blank">梦在天涯</a> 2006-01-03 16:12 <a href="http://www.cppblog.com/mzty/archive/2006/01/03/2398.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>模式设计c#－－行为型－－mediator</title><link>http://www.cppblog.com/mzty/archive/2006/01/03/2397.html</link><dc:creator>梦在天涯</dc:creator><author>梦在天涯</author><pubDate>Tue, 03 Jan 2006 08:10:00 GMT</pubDate><guid>http://www.cppblog.com/mzty/archive/2006/01/03/2397.html</guid><wfw:comment>http://www.cppblog.com/mzty/comments/2397.html</wfw:comment><comments>http://www.cppblog.com/mzty/archive/2006/01/03/2397.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mzty/comments/commentRss/2397.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mzty/services/trackbacks/2397.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 名称																		Mediator																												结构																																														意图								用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用，从而使其耦合松散，而且可以独立地改变它们之间的...&nbsp;&nbsp;<a href='http://www.cppblog.com/mzty/archive/2006/01/03/2397.html'>阅读全文</a><img src ="http://www.cppblog.com/mzty/aggbug/2397.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mzty/" target="_blank">梦在天涯</a> 2006-01-03 16:10 <a href="http://www.cppblog.com/mzty/archive/2006/01/03/2397.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>模式设计c#－－行为型－－iterator</title><link>http://www.cppblog.com/mzty/archive/2006/01/03/2396.html</link><dc:creator>梦在天涯</dc:creator><author>梦在天涯</author><pubDate>Tue, 03 Jan 2006 08:08:00 GMT</pubDate><guid>http://www.cppblog.com/mzty/archive/2006/01/03/2396.html</guid><wfw:comment>http://www.cppblog.com/mzty/comments/2396.html</wfw:comment><comments>http://www.cppblog.com/mzty/archive/2006/01/03/2396.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/mzty/comments/commentRss/2396.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mzty/services/trackbacks/2396.html</trackback:ping><description><![CDATA[<TABLE width="70%" align=center border=2>
<TBODY>
<TR>
<TD>名称</TD>
<TD><B>Iterator</B></TD></TR>
<TR>
<TD>结构</TD>
<TD><IMG height=276 alt=o_iterator.bmp src="http://www.cppblog.com/images/cppblog_com/mzty/713/o_iterator.bmp" width=560 border=0></TD></TR>
<TR>
<TD>意图</TD>
<TD>提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。</TD></TR>
<TR>
<TD>适用性</TD>
<TD>
<UL>
<LI>访问一个聚合对象的内容而无需暴露它的内部表示。 
<LI>支持对聚合对象的多种遍历。 
<LI>为遍历不同的聚合结构提供一个统一的接口(即, 支持多态迭代)。 </LI></UL></TD></TR>
<TR>
<TD></TD>
<TD></TD></TR></TBODY></TABLE><BR><BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">namespace</SPAN><SPAN style="COLOR: #000000">&nbsp;Iterator_DesignPattern<BR><IMG id=Codehighlighter1_33_1993_Open_Image onclick="this.style.display='none'; Codehighlighter1_33_1993_Open_Text.style.display='none'; Codehighlighter1_33_1993_Closed_Image.style.display='inline'; Codehighlighter1_33_1993_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_33_1993_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_33_1993_Closed_Text.style.display='none'; Codehighlighter1_33_1993_Open_Image.style.display='inline'; Codehighlighter1_33_1993_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_33_1993_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cppblog.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_33_1993_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">using</SPAN><SPAN style="COLOR: #000000">&nbsp;System;<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">using</SPAN><SPAN style="COLOR: #000000">&nbsp;System.Collections;<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;Node&nbsp;<BR><IMG id=Codehighlighter1_95_232_Open_Image onclick="this.style.display='none'; Codehighlighter1_95_232_Open_Text.style.display='none'; Codehighlighter1_95_232_Closed_Image.style.display='inline'; Codehighlighter1_95_232_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_95_232_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_95_232_Closed_Text.style.display='none'; Codehighlighter1_95_232_Open_Image.style.display='inline'; Codehighlighter1_95_232_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_95_232_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cppblog.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_95_232_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">private</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">string</SPAN><SPAN style="COLOR: #000000">&nbsp;name;<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">string</SPAN><SPAN style="COLOR: #000000">&nbsp;Name&nbsp;<BR><IMG id=Codehighlighter1_144_184_Open_Image onclick="this.style.display='none'; Codehighlighter1_144_184_Open_Text.style.display='none'; Codehighlighter1_144_184_Closed_Image.style.display='inline'; Codehighlighter1_144_184_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_144_184_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_144_184_Closed_Text.style.display='none'; Codehighlighter1_144_184_Open_Image.style.display='inline'; Codehighlighter1_144_184_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_144_184_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cppblog.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_144_184_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">get</SPAN><SPAN style="COLOR: #000000">&nbsp;<BR><IMG id=Codehighlighter1_157_180_Open_Image onclick="this.style.display='none'; Codehighlighter1_157_180_Open_Text.style.display='none'; Codehighlighter1_157_180_Closed_Image.style.display='inline'; Codehighlighter1_157_180_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_157_180_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_157_180_Closed_Text.style.display='none'; Codehighlighter1_157_180_Open_Image.style.display='inline'; Codehighlighter1_157_180_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_157_180_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cppblog.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_157_180_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;name;&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;Node(</SPAN><SPAN style="COLOR: #0000ff">string</SPAN><SPAN style="COLOR: #000000">&nbsp;s)<BR><IMG id=Codehighlighter1_212_229_Open_Image onclick="this.style.display='none'; Codehighlighter1_212_229_Open_Text.style.display='none'; Codehighlighter1_212_229_Closed_Image.style.display='inline'; Codehighlighter1_212_229_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_212_229_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_212_229_Closed_Text.style.display='none'; Codehighlighter1_212_229_Open_Image.style.display='inline'; Codehighlighter1_212_229_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_212_229_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cppblog.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_212_229_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;s;<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;NodeCollection&nbsp;<BR><IMG id=Codehighlighter1_260_650_Open_Image onclick="this.style.display='none'; Codehighlighter1_260_650_Open_Text.style.display='none'; Codehighlighter1_260_650_Closed_Image.style.display='inline'; Codehighlighter1_260_650_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_260_650_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_260_650_Closed_Text.style.display='none'; Codehighlighter1_260_650_Open_Image.style.display='inline'; Codehighlighter1_260_650_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_260_650_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cppblog.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_260_650_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">private</SPAN><SPAN style="COLOR: #000000">&nbsp;ArrayList&nbsp;list&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;ArrayList();<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">private</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;nodeMax&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;left&nbsp;as&nbsp;a&nbsp;student&nbsp;exercise&nbsp;-&nbsp;implement&nbsp;collection<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;functions&nbsp;to&nbsp;remove&nbsp;and&nbsp;edit&nbsp;entries&nbsp;also</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;AddNode(Node&nbsp;n)<BR><IMG id=Codehighlighter1_470_508_Open_Image onclick="this.style.display='none'; Codehighlighter1_470_508_Open_Text.style.display='none'; Codehighlighter1_470_508_Closed_Image.style.display='inline'; Codehighlighter1_470_508_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_470_508_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_470_508_Closed_Text.style.display='none'; Codehighlighter1_470_508_Open_Image.style.display='inline'; Codehighlighter1_470_508_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_470_508_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cppblog.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_470_508_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.Add(n);&nbsp;<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nodeMax</SPAN><SPAN style="COLOR: #000000">++</SPAN><SPAN style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;Node&nbsp;GetNode(</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;i)<BR><IMG id=Codehighlighter1_543_575_Open_Image onclick="this.style.display='none'; Codehighlighter1_543_575_Open_Text.style.display='none'; Codehighlighter1_543_575_Closed_Image.style.display='inline'; Codehighlighter1_543_575_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_543_575_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_543_575_Closed_Text.style.display='none'; Codehighlighter1_543_575_Open_Image.style.display='inline'; Codehighlighter1_543_575_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_543_575_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cppblog.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_543_575_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;((Node)&nbsp;list[i]);<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;NodeMax&nbsp;<BR><IMG id=Codehighlighter1_602_647_Open_Image onclick="this.style.display='none'; Codehighlighter1_602_647_Open_Text.style.display='none'; Codehighlighter1_602_647_Closed_Image.style.display='inline'; Codehighlighter1_602_647_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_602_647_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_602_647_Closed_Text.style.display='none'; Codehighlighter1_602_647_Open_Image.style.display='inline'; Codehighlighter1_602_647_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_602_647_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cppblog.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_602_647_Open_Text><SPAN style="COLOR: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">get</SPAN><SPAN style="COLOR: #000000">&nbsp;<BR><IMG id=Codehighlighter1_618_643_Open_Image onclick="this.style.display='none'; Codehighlighter1_618_643_Open_Text.style.display='none'; Codehighlighter1_618_643_Closed_Image.style.display='inline'; Codehighlighter1_618_643_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_618_643_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_618_643_Closed_Text.style.display='none'; Codehighlighter1_618_643_Open_Image.style.display='inline'; Codehighlighter1_618_643_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_618_643_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cppblog.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_618_643_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;nodeMax;<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG id=Codehighlighter1_654_800_Open_Image onclick="this.style.display='none'; Codehighlighter1_654_800_Open_Text.style.display='none'; Codehighlighter1_654_800_Closed_Image.style.display='inline'; Codehighlighter1_654_800_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_654_800_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_654_800_Closed_Text.style.display='none'; Codehighlighter1_654_800_Open_Image.style.display='inline'; Codehighlighter1_654_800_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_654_800_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</SPAN><SPAN id=Codehighlighter1_654_800_Open_Text><SPAN style="COLOR: #008000">/*</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;The&nbsp;iterator&nbsp;needs&nbsp;to&nbsp;understand&nbsp;how&nbsp;to&nbsp;traverse&nbsp;the&nbsp;collection&nbsp;<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;It&nbsp;can&nbsp;do&nbsp;that&nbsp;as&nbsp;way&nbsp;it&nbsp;pleases&nbsp;-&nbsp;forward,&nbsp;reverse,&nbsp;depth-first,&nbsp;<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">*/</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">abstract</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;Iterator&nbsp;<BR><IMG id=Codehighlighter1_829_865_Open_Image onclick="this.style.display='none'; Codehighlighter1_829_865_Open_Text.style.display='none'; Codehighlighter1_829_865_Closed_Image.style.display='inline'; Codehighlighter1_829_865_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_829_865_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_829_865_Closed_Text.style.display='none'; Codehighlighter1_829_865_Open_Image.style.display='inline'; Codehighlighter1_829_865_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_829_865_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cppblog.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_829_865_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">abstract</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;Node&nbsp;Next();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;ReverseIterator&nbsp;:&nbsp;Iterator<BR><IMG id=Codehighlighter1_903_1366_Open_Image onclick="this.style.display='none'; Codehighlighter1_903_1366_Open_Text.style.display='none'; Codehighlighter1_903_1366_Closed_Image.style.display='inline'; Codehighlighter1_903_1366_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_903_1366_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_903_1366_Closed_Text.style.display='none'; Codehighlighter1_903_1366_Open_Image.style.display='inline'; Codehighlighter1_903_1366_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_903_1366_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cppblog.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_903_1366_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">private</SPAN><SPAN style="COLOR: #000000">&nbsp;NodeCollection&nbsp;nodeCollection;<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">private</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;currentIndex;<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;ReverseIterator&nbsp;(NodeCollection&nbsp;c)<BR><IMG id=Codehighlighter1_1021_1111_Open_Image onclick="this.style.display='none'; Codehighlighter1_1021_1111_Open_Text.style.display='none'; Codehighlighter1_1021_1111_Closed_Image.style.display='inline'; Codehighlighter1_1021_1111_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_1021_1111_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1021_1111_Closed_Text.style.display='none'; Codehighlighter1_1021_1111_Open_Image.style.display='inline'; Codehighlighter1_1021_1111_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_1021_1111_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cppblog.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_1021_1111_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nodeCollection&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;c;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentIndex&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;c.NodeMax&nbsp;</SPAN><SPAN style="COLOR: #000000">-</SPAN><SPAN style="COLOR: #000000">1</SPAN><SPAN style="COLOR: #000000">;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;array&nbsp;index&nbsp;starts&nbsp;at&nbsp;0!</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;note:&nbsp;as&nbsp;the&nbsp;code&nbsp;stands,&nbsp;if&nbsp;the&nbsp;collection&nbsp;changes,<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;the&nbsp;iterator&nbsp;needs&nbsp;to&nbsp;be&nbsp;restarted&nbsp;</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">override</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;Node&nbsp;Next()<BR><IMG id=Codehighlighter1_1245_1363_Open_Image onclick="this.style.display='none'; Codehighlighter1_1245_1363_Open_Text.style.display='none'; Codehighlighter1_1245_1363_Closed_Image.style.display='inline'; Codehighlighter1_1245_1363_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_1245_1363_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1245_1363_Closed_Text.style.display='none'; Codehighlighter1_1245_1363_Open_Image.style.display='inline'; Codehighlighter1_1245_1363_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_1245_1363_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cppblog.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_1245_1363_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">&nbsp;(currentIndex&nbsp;</SPAN><SPAN style="COLOR: #000000">==</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">-</SPAN><SPAN style="COLOR: #000000">1</SPAN><SPAN style="COLOR: #000000">)<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">null</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">else</SPAN><SPAN style="COLOR: #000000">&nbsp;<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">(nodeCollection.GetNode(currentIndex</SPAN><SPAN style="COLOR: #000000">--</SPAN><SPAN style="COLOR: #000000">));<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG id=Codehighlighter1_1374_1449_Open_Image onclick="this.style.display='none'; Codehighlighter1_1374_1449_Open_Text.style.display='none'; Codehighlighter1_1374_1449_Closed_Image.style.display='inline'; Codehighlighter1_1374_1449_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_1374_1449_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1374_1449_Closed_Text.style.display='none'; Codehighlighter1_1374_1449_Open_Image.style.display='inline'; Codehighlighter1_1374_1449_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_1374_1449_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</SPAN><SPAN id=Codehighlighter1_1374_1449_Open_Text><SPAN style="COLOR: #808080">///</SPAN><SPAN style="COLOR: #008000">&nbsp;</SPAN><SPAN style="COLOR: #808080">&lt;summary&gt;</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #808080">///</SPAN><SPAN style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;Summary&nbsp;description&nbsp;for&nbsp;Client.<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #808080">///</SPAN><SPAN style="COLOR: #008000">&nbsp;</SPAN><SPAN style="COLOR: #808080">&lt;/summary&gt;</SPAN><SPAN style="COLOR: #808080"></SPAN></SPAN><BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;Client<BR><IMG id=Codehighlighter1_1478_1991_Open_Image onclick="this.style.display='none'; Codehighlighter1_1478_1991_Open_Text.style.display='none'; Codehighlighter1_1478_1991_Closed_Image.style.display='inline'; Codehighlighter1_1478_1991_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_1478_1991_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1478_1991_Closed_Text.style.display='none'; Codehighlighter1_1478_1991_Open_Image.style.display='inline'; Codehighlighter1_1478_1991_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_1478_1991_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cppblog.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_1478_1991_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">static</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;Main(</SPAN><SPAN style="COLOR: #0000ff">string</SPAN><SPAN style="COLOR: #000000">[]&nbsp;args)<BR><IMG id=Codehighlighter1_1534_1985_Open_Image onclick="this.style.display='none'; Codehighlighter1_1534_1985_Open_Text.style.display='none'; Codehighlighter1_1534_1985_Closed_Image.style.display='inline'; Codehighlighter1_1534_1985_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_1534_1985_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1534_1985_Closed_Text.style.display='none'; Codehighlighter1_1534_1985_Open_Image.style.display='inline'; Codehighlighter1_1534_1985_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_1534_1985_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cppblog.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_1534_1985_Open_Text><SPAN style="COLOR: #000000">{&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NodeCollection&nbsp;c&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&