﻿<?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;a href = "http://www.cppblog.com/mzty/archive/2007/03/02/19109.html"&gt;&lt;font size = 3 &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 = 3 &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 = 3 &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 = 3 &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 = 3 &gt;{C#基础}&lt;font/&gt;&lt;/a&gt;





</description><language>zh-cn</language><lastBuildDate>Fri, 20 Feb 2009 11:59:46 GMT</lastBuildDate><pubDate>Fri, 20 Feb 2009 11:59: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>2</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>2</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>2</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">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;NodeCollection();<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;c.AddNode(</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;Node(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">first</SPAN><SPAN style="COLOR: #000000">"</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;c.AddNode(</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;Node(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">second</SPAN><SPAN style="COLOR: #000000">"</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;c.AddNode(</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;Node(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">third</SPAN><SPAN style="COLOR: #000000">"</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;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;now&nbsp;use&nbsp;iterator&nbsp;to&nbsp;traverse&nbsp;this</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;&nbsp;&nbsp;&nbsp;&nbsp;ReverseIterator&nbsp;i&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;ReverseIterator(c);<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;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;the&nbsp;code&nbsp;below&nbsp;will&nbsp;work&nbsp;with&nbsp;any&nbsp;iterator&nbsp;type</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;&nbsp;&nbsp;&nbsp;&nbsp;Node&nbsp;n;<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">do</SPAN><SPAN style="COLOR: #000000">&nbsp;<BR><IMG id=Codehighlighter1_1847_1929_Open_Image onclick="this.style.display='none'; Codehighlighter1_1847_1929_Open_Text.style.display='none'; Codehighlighter1_1847_1929_Closed_Image.style.display='inline'; Codehighlighter1_1847_1929_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_1847_1929_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1847_1929_Closed_Text.style.display='none'; Codehighlighter1_1847_1929_Open_Image.style.display='inline'; Codehighlighter1_1847_1929_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_1847_1929_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_1847_1929_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;n&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;i.Next();<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">if</SPAN><SPAN style="COLOR: #000000">&nbsp;(n&nbsp;</SPAN><SPAN style="COLOR: #000000">!=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">null</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;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">{0}</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,&nbsp;n.Name);<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">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">while</SPAN><SPAN style="COLOR: #000000">&nbsp;(n&nbsp;</SPAN><SPAN style="COLOR: #000000">!=</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;&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">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/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/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align=top></SPAN></DIV><img src ="http://www.cppblog.com/mzty/aggbug/2396.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:08 <a href="http://www.cppblog.com/mzty/archive/2006/01/03/2396.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>模式设计c#－－行为型－－command</title><link>http://www.cppblog.com/mzty/archive/2006/01/03/2395.html</link><dc:creator>梦在天涯</dc:creator><author>梦在天涯</author><pubDate>Tue, 03 Jan 2006 08:07:00 GMT</pubDate><guid>http://www.cppblog.com/mzty/archive/2006/01/03/2395.html</guid><wfw:comment>http://www.cppblog.com/mzty/comments/2395.html</wfw:comment><comments>http://www.cppblog.com/mzty/archive/2006/01/03/2395.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/mzty/comments/commentRss/2395.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mzty/services/trackbacks/2395.html</trackback:ping><description><![CDATA[<TABLE width="70%" align=center border=2>
<TBODY>
<TR>
<TD>名称</TD>
<TD><B>Command</B></TD></TR>
<TR>
<TD>结构</TD>
<TD><IMG height=212 alt=o_command.bmp src="http://www.cppblog.com/images/cppblog_com/mzty/713/o_command.bmp" width=603 border=0></TD></TR>
<TR>
<TD>意图</TD>
<TD>将一个请求封装为一个对象，从而使你可用不同的请求对客户进行参数化；对请求排队或记录请求日志，以及支持可撤消的操作。</TD></TR>
<TR>
<TD>适用性</TD>
<TD>
<UL>
<LI>抽象出待执行的动作以参数化某对象，你可用过程语言中的回调（c a l l b a c k ）函数表达这种参数化机制。所谓回调函数是指函数先在某处注册，而它将在稍后某个需要的时候被调用。C o m m a n d 模式是回调机制的一个面向对象的替代品。 
<LI>在不同的时刻指定、排列和执行请求。一个C o m m a n d 对象可以有一个与初始请求无关的生存期。如果一个请求的接收者可用一种与地址空间无关的方式表达，那么就可将负责该请求的命令对象传送给另一个不同的进程并在那儿实现该请求。 
<LI>支持取消操作。C o m m a n d 的E x c u t e 操作可在实施操作前将状态存储起来，在取消操作时这个状态用来消除该操作的影响。C o m m a n d 接口必须添加一个U n e x e c u t e 操作，该操作取消上一次E x e c u t e 调用的效果。执行的命令被存储在一个历史列表中。可通过向后和向前遍历这一列表并分别调用U n e x e c u t e 和E x e c u t e 来实现重数不限的“取消”和“重做”。 
<LI>支持修改日志，这样当系统崩溃时，这些修改可以被重做一遍。在C o m m a n d 接口中添加装载操作和存储操作，可以用来保持变动的一个一致的修改日志。从崩溃中恢复的过程包括从磁盘中重新读入记录下来的命令并用E x e c u t e 操作重新执行它们。 
<LI>用构建在原语操作上的高层操作构造一个系统。这样一种结构在支持事务( t r a n s a c t i o n )的信息系统中很常见。一个事务封装了对数据的一组变动。C o m m a n d 模式提供了对事务进行建模的方法。C o m m a n d 有一个公共的接口，使得你可以用同一种方式调用所有的事务。同时使用该模式也易于添加新事务以扩展系统。 </LI></UL></TD></TR>
<TR>
<TD></TD>
<TD></TD></TR></TBODY></TABLE><BR>Code Example<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;Command_DesignPattern<BR><IMG id=Codehighlighter1_32_1224_Open_Image onclick="this.style.display='none'; Codehighlighter1_32_1224_Open_Text.style.display='none'; Codehighlighter1_32_1224_Closed_Image.style.display='inline'; Codehighlighter1_32_1224_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_32_1224_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_32_1224_Closed_Text.style.display='none'; Codehighlighter1_32_1224_Open_Image.style.display='inline'; Codehighlighter1_32_1224_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_32_1224_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_32_1224_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><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;Command&nbsp;<BR><IMG id=Codehighlighter1_79_202_Open_Image onclick="this.style.display='none'; Codehighlighter1_79_202_Open_Text.style.display='none'; Codehighlighter1_79_202_Closed_Image.style.display='inline'; Codehighlighter1_79_202_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_79_202_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_79_202_Closed_Text.style.display='none'; Codehighlighter1_79_202_Open_Image.style.display='inline'; Codehighlighter1_79_202_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_79_202_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_79_202_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;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;Execute();<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">protected</SPAN><SPAN style="COLOR: #000000">&nbsp;Receiver&nbsp;r;<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;Receiver&nbsp;R<BR><IMG id=Codehighlighter1_161_199_Open_Image onclick="this.style.display='none'; Codehighlighter1_161_199_Open_Text.style.display='none'; Codehighlighter1_161_199_Closed_Image.style.display='inline'; Codehighlighter1_161_199_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_161_199_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_161_199_Closed_Text.style.display='none'; Codehighlighter1_161_199_Open_Image.style.display='inline'; Codehighlighter1_161_199_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_161_199_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_161_199_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">set</SPAN><SPAN style="COLOR: #000000">&nbsp;<BR><IMG id=Codehighlighter1_174_195_Open_Image onclick="this.style.display='none'; Codehighlighter1_174_195_Open_Text.style.display='none'; Codehighlighter1_174_195_Closed_Image.style.display='inline'; Codehighlighter1_174_195_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_174_195_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_174_195_Closed_Text.style.display='none'; Codehighlighter1_174_195_Open_Image.style.display='inline'; Codehighlighter1_174_195_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_174_195_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_174_195_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;r&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;value;&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/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;ConcreteCommand&nbsp;:&nbsp;Command<BR><IMG id=Codehighlighter1_239_352_Open_Image onclick="this.style.display='none'; Codehighlighter1_239_352_Open_Text.style.display='none'; Codehighlighter1_239_352_Closed_Image.style.display='inline'; Codehighlighter1_239_352_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_239_352_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_239_352_Closed_Text.style.display='none'; Codehighlighter1_239_352_Open_Image.style.display='inline'; Codehighlighter1_239_352_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_239_352_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_239_352_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">override</SPAN><SPAN style="COLOR: #000000">&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;Execute()<BR><IMG id=Codehighlighter1_276_349_Open_Image onclick="this.style.display='none'; Codehighlighter1_276_349_Open_Text.style.display='none'; Codehighlighter1_276_349_Closed_Image.style.display='inline'; Codehighlighter1_276_349_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_276_349_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_276_349_Closed_Text.style.display='none'; Codehighlighter1_276_349_Open_Image.style.display='inline'; Codehighlighter1_276_349_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_276_349_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_276_349_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;Console.WriteLine(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Command&nbsp;executed</SPAN><SPAN style="COLOR: #000000">"</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;r.InformAboutCommand();<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 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;Receiver&nbsp;<BR><IMG id=Codehighlighter1_373_479_Open_Image onclick="this.style.display='none'; Codehighlighter1_373_479_Open_Text.style.display='none'; Codehighlighter1_373_479_Closed_Image.style.display='inline'; Codehighlighter1_373_479_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_373_479_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_373_479_Closed_Text.style.display='none'; Codehighlighter1_373_479_Open_Image.style.display='inline'; Codehighlighter1_373_479_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_373_479_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_373_479_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">void</SPAN><SPAN style="COLOR: #000000">&nbsp;InformAboutCommand()<BR><IMG id=Codehighlighter1_412_473_Open_Image onclick="this.style.display='none'; Codehighlighter1_412_473_Open_Text.style.display='none'; Codehighlighter1_412_473_Closed_Image.style.display='inline'; Codehighlighter1_412_473_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_412_473_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_412_473_Closed_Text.style.display='none'; Codehighlighter1_412_473_Open_Image.style.display='inline'; Codehighlighter1_412_473_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_412_473_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_412_473_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;Console.WriteLine(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Receiver&nbsp;informed&nbsp;about&nbsp;command</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/InBlock.gif" align=top>&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;Invoker&nbsp;<BR><IMG id=Codehighlighter1_499_654_Open_Image onclick="this.style.display='none'; Codehighlighter1_499_654_Open_Text.style.display='none'; Codehighlighter1_499_654_Closed_Image.style.display='inline'; Codehighlighter1_499_654_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_499_654_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_499_654_Closed_Text.style.display='none'; Codehighlighter1_499_654_Open_Image.style.display='inline'; Codehighlighter1_499_654_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_499_654_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_499_654_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;Command&nbsp;command;<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">void</SPAN><SPAN style="COLOR: #000000">&nbsp;StoreCommand(Command&nbsp;c)<BR><IMG id=Codehighlighter1_568_588_Open_Image onclick="this.style.display='none'; Codehighlighter1_568_588_Open_Text.style.display='none'; Codehighlighter1_568_588_Closed_Image.style.display='inline'; Codehighlighter1_568_588_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_568_588_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_568_588_Closed_Text.style.display='none'; Codehighlighter1_568_588_Open_Image.style.display='inline'; Codehighlighter1_568_588_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_568_588_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_568_588_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;command&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;c;<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;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;ExecuteCommand()<BR><IMG id=Codehighlighter1_623_649_Open_Image onclick="this.style.display='none'; Codehighlighter1_623_649_Open_Text.style.display='none'; Codehighlighter1_623_649_Closed_Image.style.display='inline'; Codehighlighter1_623_649_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_623_649_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_623_649_Closed_Text.style.display='none'; Codehighlighter1_623_649_Open_Image.style.display='inline'; Codehighlighter1_623_649_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_623_649_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_623_649_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;command.Execute();<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/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_658_733_Open_Image onclick="this.style.display='none'; Codehighlighter1_658_733_Open_Text.style.display='none'; Codehighlighter1_658_733_Closed_Image.style.display='inline'; Codehighlighter1_658_733_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_658_733_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_658_733_Closed_Text.style.display='none'; Codehighlighter1_658_733_Open_Image.style.display='inline'; Codehighlighter1_658_733_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_658_733_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_658_733_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_762_1222_Open_Image onclick="this.style.display='none'; Codehighlighter1_762_1222_Open_Text.style.display='none'; Codehighlighter1_762_1222_Closed_Image.style.display='inline'; Codehighlighter1_762_1222_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_762_1222_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_762_1222_Closed_Text.style.display='none'; Codehighlighter1_762_1222_Open_Image.style.display='inline'; Codehighlighter1_762_1222_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_762_1222_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_762_1222_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_818_1216_Open_Image onclick="this.style.display='none'; Codehighlighter1_818_1216_Open_Text.style.display='none'; Codehighlighter1_818_1216_Closed_Image.style.display='inline'; Codehighlighter1_818_1216_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_818_1216_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_818_1216_Closed_Text.style.display='none'; Codehighlighter1_818_1216_Open_Image.style.display='inline'; Codehighlighter1_818_1216_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_818_1216_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_818_1216_Open_Text><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;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;Set&nbsp;up&nbsp;everything</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;&nbsp;&nbsp;&nbsp;&nbsp;Command&nbsp;c&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;ConcreteCommand();<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;Receiver&nbsp;r&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;Receiver();<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;c.R&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;r;<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;Invoker&nbsp;i&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;Invoker();<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;i.StoreCommand(c);<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;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;now&nbsp;let&nbsp;application&nbsp;run<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;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;the&nbsp;invoker&nbsp;is&nbsp;how&nbsp;the&nbsp;command&nbsp;is&nbsp;exposed&nbsp;for&nbsp;the&nbsp;end-user&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: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;(or&nbsp;a&nbsp;client)&nbsp;initiates&nbsp;the&nbsp;command,&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: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;(e.g.&nbsp;toolbar&nbsp;button,&nbsp;menu&nbsp;item)</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top></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;i.ExecuteCommand();<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;&nbsp;&nbsp;&nbsp;&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/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/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align=top></SPAN></DIV><img src ="http://www.cppblog.com/mzty/aggbug/2395.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:07 <a href="http://www.cppblog.com/mzty/archive/2006/01/03/2395.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>模式设计c#－－行为型－－Chain of Responsibility</title><link>http://www.cppblog.com/mzty/archive/2006/01/03/2394.html</link><dc:creator>梦在天涯</dc:creator><author>梦在天涯</author><pubDate>Tue, 03 Jan 2006 08:06:00 GMT</pubDate><guid>http://www.cppblog.com/mzty/archive/2006/01/03/2394.html</guid><wfw:comment>http://www.cppblog.com/mzty/comments/2394.html</wfw:comment><comments>http://www.cppblog.com/mzty/archive/2006/01/03/2394.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/mzty/comments/commentRss/2394.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mzty/services/trackbacks/2394.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 名称																		Chain of Responsibility																												结构																																														意图								使多个对象都有机会处理请求，从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条...&nbsp;&nbsp;<a href='http://www.cppblog.com/mzty/archive/2006/01/03/2394.html'>阅读全文</a><img src ="http://www.cppblog.com/mzty/aggbug/2394.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:06 <a href="http://www.cppblog.com/mzty/archive/2006/01/03/2394.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>模式设计c#－－行为型－－templetemethod</title><link>http://www.cppblog.com/mzty/archive/2006/01/03/2393.html</link><dc:creator>梦在天涯</dc:creator><author>梦在天涯</author><pubDate>Tue, 03 Jan 2006 08:04:00 GMT</pubDate><guid>http://www.cppblog.com/mzty/archive/2006/01/03/2393.html</guid><wfw:comment>http://www.cppblog.com/mzty/comments/2393.html</wfw:comment><comments>http://www.cppblog.com/mzty/archive/2006/01/03/2393.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mzty/comments/commentRss/2393.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mzty/services/trackbacks/2393.html</trackback:ping><description><![CDATA[
		<table cellspacing="1" cellpadding="10" width="70%" align="center" border="2">
				<tbody>
						<tr>
								<td>名称</td>
								<td>
										<b>Template Method</b>
								</td>
						</tr>
						<tr>
								<td>结构</td>
								<td>
										<img height="225" alt="o_templetemethod.bmp" src="http://www.cppblog.com/images/cppblog_com/mzty/713/o_templetemethod.bmp" width="395" border="0" />
								</td>
						</tr>
						<tr>
								<td>意图</td>
								<td>定义一个操作中的算法的骨架，而将一些步骤延迟到子类中。Te m p l a t e M e t h o d 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。</td>
						</tr>
						<tr>
								<td>适用性</td>
								<td>
										<ul>
												<li>一次性实现一个算法的不变的部分，并将可变的行为留给子类来实现。 
</li>
												<li>各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。这是O p d y k e 和J o h n s o n 所描述过的“重分解以一般化”的一个很好的例子[ O J 9 3 ]。首先识别现有代码中的不同之处，并且将不同之处分离为新的操作。最后，用一个调用这些新的操作的模板方法来替换这些不同的代码。 
</li>
												<li>控制子类扩展。模板方法只在特定点调用“h o o k ”操作（参见效果一节），这样就只允许在这些点进行扩展。 </li>
										</ul>
								</td>
						</tr>
						<tr>
								<td>
								</td>
								<td>
								</td>
						</tr>
				</tbody>
		</table>
		<br />Code Example<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"> TemplateMethod_DesignPattern<br /><img id="Codehighlighter1_39_1325_Open_Image" onclick="this.style.display='none'; Codehighlighter1_39_1325_Open_Text.style.display='none'; Codehighlighter1_39_1325_Closed_Image.style.display='inline'; Codehighlighter1_39_1325_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_39_1325_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_39_1325_Closed_Text.style.display='none'; Codehighlighter1_39_1325_Open_Image.style.display='inline'; Codehighlighter1_39_1325_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_39_1325_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_1325_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000"> System;<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" />    </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Algorithm <br /><img id="Codehighlighter1_79_801_Open_Image" onclick="this.style.display='none'; Codehighlighter1_79_801_Open_Text.style.display='none'; Codehighlighter1_79_801_Closed_Image.style.display='inline'; Codehighlighter1_79_801_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_79_801_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_79_801_Closed_Text.style.display='none'; Codehighlighter1_79_801_Open_Image.style.display='inline'; Codehighlighter1_79_801_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_79_801_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_79_801_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> DoAlgorithm() <br /><img id="Codehighlighter1_112_599_Open_Image" onclick="this.style.display='none'; Codehighlighter1_112_599_Open_Text.style.display='none'; Codehighlighter1_112_599_Closed_Image.style.display='inline'; Codehighlighter1_112_599_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_112_599_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_112_599_Closed_Text.style.display='none'; Codehighlighter1_112_599_Open_Image.style.display='inline'; Codehighlighter1_112_599_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span id="Codehighlighter1_112_599_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_112_599_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />            Console.WriteLine(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">In DoAlgorithm</span><span style="COLOR: #000000">"</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" />            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> do some part of the algorithm here<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" />            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> step1 goes here</span><span style="COLOR: #008000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">            Console.WriteLine(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">In Algorithm - DoAlgoStep1</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);            <br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> . . . <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" />            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> step 2 goes here</span><span style="COLOR: #008000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">            Console.WriteLine(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">In Algorithm - DoAlgoStep2</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);            <br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> . . . <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" />            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> Now call configurable/replacable part</span><span style="COLOR: #008000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">            DoAlgoStep3();<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" />            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> step 4 goes here</span><span style="COLOR: #008000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">            Console.WriteLine(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">In Algorithm - DoAlgoStep4</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);            <br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> . . . <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" />            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> Now call next configurable part</span><span style="COLOR: #008000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">            DoAlgoStep5();<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</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" />        </span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> DoAlgoStep3()<br /><img id="Codehighlighter1_640_698_Open_Image" onclick="this.style.display='none'; Codehighlighter1_640_698_Open_Text.style.display='none'; Codehighlighter1_640_698_Closed_Image.style.display='inline'; Codehighlighter1_640_698_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_640_698_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_640_698_Closed_Text.style.display='none'; Codehighlighter1_640_698_Open_Image.style.display='inline'; Codehighlighter1_640_698_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span id="Codehighlighter1_640_698_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_640_698_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />            Console.WriteLine(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">In Algorithm - DoAlgoStep3</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);        <br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</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" />        </span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> DoAlgoStep5()<br /><img id="Codehighlighter1_739_798_Open_Image" onclick="this.style.display='none'; Codehighlighter1_739_798_Open_Text.style.display='none'; Codehighlighter1_739_798_Closed_Image.style.display='inline'; Codehighlighter1_739_798_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_739_798_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_739_798_Closed_Text.style.display='none'; Codehighlighter1_739_798_Open_Image.style.display='inline'; Codehighlighter1_739_798_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span id="Codehighlighter1_739_798_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_739_798_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />            Console.WriteLine(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">In Algorithm - DoAlgoStep5</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);            <br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</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" />    </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> CustomAlgorithm : Algorithm<br /><img id="Codehighlighter1_840_1050_Open_Image" onclick="this.style.display='none'; Codehighlighter1_840_1050_Open_Text.style.display='none'; Codehighlighter1_840_1050_Closed_Image.style.display='inline'; Codehighlighter1_840_1050_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_840_1050_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_840_1050_Closed_Text.style.display='none'; Codehighlighter1_840_1050_Open_Image.style.display='inline'; Codehighlighter1_840_1050_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_840_1050_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_840_1050_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">override</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> DoAlgoStep3()<br /><img id="Codehighlighter1_881_943_Open_Image" onclick="this.style.display='none'; Codehighlighter1_881_943_Open_Text.style.display='none'; Codehighlighter1_881_943_Closed_Image.style.display='inline'; Codehighlighter1_881_943_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_881_943_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_881_943_Closed_Text.style.display='none'; Codehighlighter1_881_943_Open_Image.style.display='inline'; Codehighlighter1_881_943_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span id="Codehighlighter1_881_943_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_881_943_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />            Console.WriteLine(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">In CustomAlgorithm - DoAlgoStep3</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</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" />        </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">override</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> DoAlgoStep5()<br /><img id="Codehighlighter1_985_1047_Open_Image" onclick="this.style.display='none'; Codehighlighter1_985_1047_Open_Text.style.display='none'; Codehighlighter1_985_1047_Closed_Image.style.display='inline'; Codehighlighter1_985_1047_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_985_1047_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_985_1047_Closed_Text.style.display='none'; Codehighlighter1_985_1047_Open_Image.style.display='inline'; Codehighlighter1_985_1047_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span id="Codehighlighter1_985_1047_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_985_1047_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />            Console.WriteLine(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">In CustomAlgorithm - DoAlgoStep5</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_1057_1132_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1057_1132_Open_Text.style.display='none'; Codehighlighter1_1057_1132_Closed_Image.style.display='inline'; Codehighlighter1_1057_1132_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1057_1132_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1057_1132_Closed_Text.style.display='none'; Codehighlighter1_1057_1132_Open_Image.style.display='inline'; Codehighlighter1_1057_1132_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_1057_1132_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_1057_1132_Open_Text"><span style="COLOR: #808080">///</span><span style="COLOR: #008000"> </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" />    </span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">    Summary description for Client.<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    </span><span style="COLOR: #808080">///</span><span style="COLOR: #008000"> </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">    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Client<br /><img id="Codehighlighter1_1161_1323_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1161_1323_Open_Text.style.display='none'; Codehighlighter1_1161_1323_Closed_Image.style.display='inline'; Codehighlighter1_1161_1323_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1161_1323_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1161_1323_Closed_Text.style.display='none'; Codehighlighter1_1161_1323_Open_Image.style.display='inline'; Codehighlighter1_1161_1323_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_1161_1323_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_1161_1323_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> Main(</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">[] args)<br /><img id="Codehighlighter1_1217_1317_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1217_1317_Open_Text.style.display='none'; Codehighlighter1_1217_1317_Closed_Image.style.display='inline'; Codehighlighter1_1217_1317_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1217_1317_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1217_1317_Closed_Text.style.display='none'; Codehighlighter1_1217_1317_Open_Image.style.display='inline'; Codehighlighter1_1217_1317_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span id="Codehighlighter1_1217_1317_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_1217_1317_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />            CustomAlgorithm c </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> CustomAlgorithm();<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" />            c.DoAlgorithm();<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" />            </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />模板方法（Template Method）模式
<p>准备一个抽象类，将部分逻辑以具体方法以及具体构造子的形式实现，然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法，从而对剩余的逻辑有不同的实现。这就是模版方法模式的用意。</p><p>很多人可能没有想到，模版方法模式实际上是所有模式中最为常见的几个模式之一，而且很多人可能使用过模版方法模式而没有意识到自己已经使用了这个模式。模版方法模式是基于继承的代码复用的基本技术，模版方法模式的结构和用法也是面向对象设计的核心。</p><p>模版方法模式需要开发抽象类和具体子类的设计师之间的协作。一个设计师负责给出一个算法的轮廓和骨架，另一些设计师则负责给出这个算法的各个逻辑步骤。代表这些具体逻辑步骤的方法称做基本方法（primitive method）；而将这些基本法方法总汇起来的方法叫做模版方法（template method），这个设计模式的名字就是从此而来。<br /> 模版方法模式中的方法</p><p>模版方法中的方法可以分为两大类：模版方法（Template Method）和基本方法（Primitive Method)。</p><p><font color="#000080">模版方法</font></p><p>一个模版方法是定义在抽象类中的，把基本操作方法组合在一起形成一个总算法或一个总行为的方法。这个模版方法一般会在抽象类中定义，并由子类不加以修改地完全继承下来。</p><p><font color="#000080">基本方法</font></p><p>基本方法又可以分为三种：抽象方法（Abstract Method）、具体方法（Concrete Method）和钩子方法（Hook Method）。</p><p>抽象方法：一个抽象方法由抽象类声明，由具体子类实现。在C#语言里一个抽象方法以abstract关键字标示出来。</p><p>具体方法：一个具体方法由抽象类声明并实现，而子类并不实现或置换。在C#语言里面，一个具体方法没有abstract关键字。</p><p>钩子方法：一个钩子方法由抽象类声明并实现，而子类会加以扩展。通常抽象类给出的实现是一个空实现，作为方法的默认实现。（Visual FoxPro中项目向导建立的项目会使用一个AppHook类实现监视项目成员变化，调整系统结构的工作。）钩子方法的名字通常以do开始。</p><img src ="http://www.cppblog.com/mzty/aggbug/2393.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:04 <a href="http://www.cppblog.com/mzty/archive/2006/01/03/2393.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>模式设计c#－－行为型－－interpreter</title><link>http://www.cppblog.com/mzty/archive/2006/01/03/2392.html</link><dc:creator>梦在天涯</dc:creator><author>梦在天涯</author><pubDate>Tue, 03 Jan 2006 08:02:00 GMT</pubDate><guid>http://www.cppblog.com/mzty/archive/2006/01/03/2392.html</guid><wfw:comment>http://www.cppblog.com/mzty/comments/2392.html</wfw:comment><comments>http://www.cppblog.com/mzty/archive/2006/01/03/2392.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mzty/comments/commentRss/2392.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mzty/services/trackbacks/2392.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 名称																		Interpreter																												结构																																														意图								给定一个语言，定义它的文法的一种表示，并定义一个解释器，这个解释器使用该表示来解释语言中的句子。						...&nbsp;&nbsp;<a href='http://www.cppblog.com/mzty/archive/2006/01/03/2392.html'>阅读全文</a><img src ="http://www.cppblog.com/mzty/aggbug/2392.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:02 <a href="http://www.cppblog.com/mzty/archive/2006/01/03/2392.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>模式设计c#－－结构型－－proxy</title><link>http://www.cppblog.com/mzty/archive/2006/01/03/2391.html</link><dc:creator>梦在天涯</dc:creator><author>梦在天涯</author><pubDate>Tue, 03 Jan 2006 07:51:00 GMT</pubDate><guid>http://www.cppblog.com/mzty/archive/2006/01/03/2391.html</guid><wfw:comment>http://www.cppblog.com/mzty/comments/2391.html</wfw:comment><comments>http://www.cppblog.com/mzty/archive/2006/01/03/2391.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/mzty/comments/commentRss/2391.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mzty/services/trackbacks/2391.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 名称																		Proxy																												结构																																														意图								为其他对象提供一种代理以控制对这个对象的访问。																				适用性								...&nbsp;&nbsp;<a href='http://www.cppblog.com/mzty/archive/2006/01/03/2391.html'>阅读全文</a><img src ="http://www.cppblog.com/mzty/aggbug/2391.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 15:51 <a href="http://www.cppblog.com/mzty/archive/2006/01/03/2391.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>模式设计c#－－结构型－－flyweight</title><link>http://www.cppblog.com/mzty/archive/2006/01/03/2390.html</link><dc:creator>梦在天涯</dc:creator><author>梦在天涯</author><pubDate>Tue, 03 Jan 2006 07:50:00 GMT</pubDate><guid>http://www.cppblog.com/mzty/archive/2006/01/03/2390.html</guid><wfw:comment>http://www.cppblog.com/mzty/comments/2390.html</wfw:comment><comments>http://www.cppblog.com/mzty/archive/2006/01/03/2390.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mzty/comments/commentRss/2390.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mzty/services/trackbacks/2390.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 名称																		Flyweight																												结构																																														意图								运用共享技术有效地支持大量细粒度的对象。																				适用性								...&nbsp;&nbsp;<a href='http://www.cppblog.com/mzty/archive/2006/01/03/2390.html'>阅读全文</a><img src ="http://www.cppblog.com/mzty/aggbug/2390.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 15:50 <a href="http://www.cppblog.com/mzty/archive/2006/01/03/2390.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>模式设计c#－－结构型－－facade</title><link>http://www.cppblog.com/mzty/archive/2006/01/03/2389.html</link><dc:creator>梦在天涯</dc:creator><author>梦在天涯</author><pubDate>Tue, 03 Jan 2006 07:48:00 GMT</pubDate><guid>http://www.cppblog.com/mzty/archive/2006/01/03/2389.html</guid><wfw:comment>http://www.cppblog.com/mzty/comments/2389.html</wfw:comment><comments>http://www.cppblog.com/mzty/archive/2006/01/03/2389.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/mzty/comments/commentRss/2389.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mzty/services/trackbacks/2389.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 名称																		Facade																												结构																																														意图								为子系统中的一组接口提供一个一致的界面，F a c a d e 模式定义了一个高层接口，这个接口使得这一子系统更加容易使用。...&nbsp;&nbsp;<a href='http://www.cppblog.com/mzty/archive/2006/01/03/2389.html'>阅读全文</a><img src ="http://www.cppblog.com/mzty/aggbug/2389.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 15:48 <a href="http://www.cppblog.com/mzty/archive/2006/01/03/2389.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>模式设计c#－－结构型－－decorator</title><link>http://www.cppblog.com/mzty/archive/2006/01/03/2388.html</link><dc:creator>梦在天涯</dc:creator><author>梦在天涯</author><pubDate>Tue, 03 Jan 2006 07:47:00 GMT</pubDate><guid>http://www.cppblog.com/mzty/archive/2006/01/03/2388.html</guid><wfw:comment>http://www.cppblog.com/mzty/comments/2388.html</wfw:comment><comments>http://www.cppblog.com/mzty/archive/2006/01/03/2388.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/mzty/comments/commentRss/2388.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mzty/services/trackbacks/2388.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 名称																		Decorator																												结构																																														意图								动态地给一个对象添加一些额外的职责。就增加功能来说，D e c o r a t o r 模式相比生成子类更为灵活。...&nbsp;&nbsp;<a href='http://www.cppblog.com/mzty/archive/2006/01/03/2388.html'>阅读全文</a><img src ="http://www.cppblog.com/mzty/aggbug/2388.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 15:47 <a href="http://www.cppblog.com/mzty/archive/2006/01/03/2388.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>模式设计c#－－结构型－－composite</title><link>http://www.cppblog.com/mzty/archive/2006/01/03/2387.html</link><dc:creator>梦在天涯</dc:creator><author>梦在天涯</author><pubDate>Tue, 03 Jan 2006 07:45:00 GMT</pubDate><guid>http://www.cppblog.com/mzty/archive/2006/01/03/2387.html</guid><wfw:comment>http://www.cppblog.com/mzty/comments/2387.html</wfw:comment><comments>http://www.cppblog.com/mzty/archive/2006/01/03/2387.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/mzty/comments/commentRss/2387.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mzty/services/trackbacks/2387.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 名称																		Composite																												结构																																														意图								将对象组合成树形结构以表示“部分-整体”的层次结构。C o m p o s i t e 使得用户对单个对象和组合对象的...&nbsp;&nbsp;<a href='http://www.cppblog.com/mzty/archive/2006/01/03/2387.html'>阅读全文</a><img src ="http://www.cppblog.com/mzty/aggbug/2387.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 15:45 <a href="http://www.cppblog.com/mzty/archive/2006/01/03/2387.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>模式设计c#－－结构型－－Bridge</title><link>http://www.cppblog.com/mzty/archive/2006/01/03/2386.html</link><dc:creator>梦在天涯</dc:creator><author>梦在天涯</author><pubDate>Tue, 03 Jan 2006 07:43:00 GMT</pubDate><guid>http://www.cppblog.com/mzty/archive/2006/01/03/2386.html</guid><wfw:comment>http://www.cppblog.com/mzty/comments/2386.html</wfw:comment><comments>http://www.cppblog.com/mzty/archive/2006/01/03/2386.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/mzty/comments/commentRss/2386.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mzty/services/trackbacks/2386.html</trackback:ping><description><![CDATA[<TABLE width="70%" align=center border=2>
<TBODY>
<TR>
<TD>名称</TD>
<TD><B>Bridge</B></TD></TR>
<TR>
<TD>结构</TD>
<TD><IMG height=246 alt=o_bridge.bmp src="http://www.cppblog.com/images/cppblog_com/mzty/713/o_bridge.bmp" width=600 border=0></TD></TR>
<TR>
<TD>意图</TD>
<TD>将抽象部分与它的实现部分分离，使它们都可以独立地变化。</TD></TR>
<TR>
<TD>适用性</TD>
<TD>
<UL>
<LI>你不希望在抽象和它的实现部分之间有一个固定的绑定关系。例如这种情况可能是因为，在程序运行时刻实现部分应可以被选择或者切换。 
<LI>类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。这时B r i d g e 模式使你可以对不同的抽象接口和实现部分进行组合，并分别对它们进行扩充。 
<LI>对一个抽象的实现部分的修改应对客户不产生影响，即客户的代码不必重新编译。 
<LI>（C + +）你想对客户完全隐藏抽象的实现部分。在C + +中，类的表示在类接口中是可见的。 
<LI>有许多类要生成。这样一种类层次结构说明你必须将一个对象分解成两个部分。R u m b a u g h 称这种类层次结构为“嵌套的普化”（nested generalizations ）。 
<LI>你想在多个对象间共享实现（可能使用引用计数），但同时要求客户并不知道这一点。一个简单的例子便是C o p l i e n 的S t r i n g 类[ C o p 9 2 ]，在这个类中多个对象可以共享同一个字符串表示（S t r i n g R e p ）。 </LI></UL></TD></TR>
<TR>
<TD></TD>
<TD></TD></TR></TBODY></TABLE><BR>Code Example<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;Bridge_DesignPattern<BR><IMG id=Codehighlighter1_31_2075_Open_Image onclick="this.style.display='none'; Codehighlighter1_31_2075_Open_Text.style.display='none'; Codehighlighter1_31_2075_Closed_Image.style.display='inline'; Codehighlighter1_31_2075_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_31_2075_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_31_2075_Closed_Text.style.display='none'; Codehighlighter1_31_2075_Open_Image.style.display='inline'; Codehighlighter1_31_2075_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_31_2075_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_31_2075_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><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;Abstraction&nbsp;<BR><IMG id=Codehighlighter1_73_279_Open_Image onclick="this.style.display='none'; Codehighlighter1_73_279_Open_Text.style.display='none'; Codehighlighter1_73_279_Closed_Image.style.display='inline'; Codehighlighter1_73_279_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_73_279_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_73_279_Closed_Text.style.display='none'; Codehighlighter1_73_279_Open_Image.style.display='inline'; Codehighlighter1_73_279_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_73_279_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_73_279_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">protected</SPAN><SPAN style="COLOR: #000000">&nbsp;Implementation&nbsp;impToUse;<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">void</SPAN><SPAN style="COLOR: #000000">&nbsp;SetImplementation(Implementation&nbsp;i)<BR><IMG id=Codehighlighter1_165_186_Open_Image onclick="this.style.display='none'; Codehighlighter1_165_186_Open_Text.style.display='none'; Codehighlighter1_165_186_Closed_Image.style.display='inline'; Codehighlighter1_165_186_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_165_186_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_165_186_Closed_Text.style.display='none'; Codehighlighter1_165_186_Open_Image.style.display='inline'; Codehighlighter1_165_186_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_165_186_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_165_186_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;impToUse&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;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">virtual</SPAN><SPAN style="COLOR: #000000">&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;DumpString(</SPAN><SPAN style="COLOR: #0000ff">string</SPAN><SPAN style="COLOR: #000000">&nbsp;str)<BR><IMG id=Codehighlighter1_236_276_Open_Image onclick="this.style.display='none'; Codehighlighter1_236_276_Open_Text.style.display='none'; Codehighlighter1_236_276_Closed_Image.style.display='inline'; Codehighlighter1_236_276_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_236_276_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_236_276_Closed_Text.style.display='none'; Codehighlighter1_236_276_Open_Image.style.display='inline'; Codehighlighter1_236_276_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_236_276_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_236_276_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;impToUse.DoStringOp(str);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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"><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;DerivedAbstraction_One&nbsp;:&nbsp;Abstraction&nbsp;<BR><IMG id=Codehighlighter1_328_437_Open_Image onclick="this.style.display='none'; Codehighlighter1_328_437_Open_Text.style.display='none'; Codehighlighter1_328_437_Closed_Image.style.display='inline'; Codehighlighter1_328_437_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_328_437_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_328_437_Closed_Text.style.display='none'; Codehighlighter1_328_437_Open_Image.style.display='inline'; Codehighlighter1_328_437_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_328_437_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_328_437_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">override</SPAN><SPAN style="COLOR: #000000">&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;DumpString(</SPAN><SPAN style="COLOR: #0000ff">string</SPAN><SPAN style="COLOR: #000000">&nbsp;str)<BR><IMG id=Codehighlighter1_378_432_Open_Image onclick="this.style.display='none'; Codehighlighter1_378_432_Open_Text.style.display='none'; Codehighlighter1_378_432_Closed_Image.style.display='inline'; Codehighlighter1_378_432_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_378_432_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_378_432_Closed_Text.style.display='none'; Codehighlighter1_378_432_Open_Image.style.display='inline'; Codehighlighter1_378_432_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_378_432_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_378_432_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;str&nbsp;</SPAN><SPAN style="COLOR: #000000">+=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">.com</SPAN><SPAN style="COLOR: #000000">"</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;impToUse.DoStringOp(str);&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/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;Implementation&nbsp;<BR><IMG id=Codehighlighter1_464_635_Open_Image onclick="this.style.display='none'; Codehighlighter1_464_635_Open_Text.style.display='none'; Codehighlighter1_464_635_Closed_Image.style.display='inline'; Codehighlighter1_464_635_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_464_635_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_464_635_Closed_Text.style.display='none'; Codehighlighter1_464_635_Open_Image.style.display='inline'; Codehighlighter1_464_635_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_464_635_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_464_635_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">virtual</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;DoStringOp(</SPAN><SPAN style="COLOR: #0000ff">string</SPAN><SPAN style="COLOR: #000000">&nbsp;str)<BR><IMG id=Codehighlighter1_513_630_Open_Image onclick="this.style.display='none'; Codehighlighter1_513_630_Open_Text.style.display='none'; Codehighlighter1_513_630_Closed_Image.style.display='inline'; Codehighlighter1_513_630_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_513_630_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_513_630_Closed_Text.style.display='none'; Codehighlighter1_513_630_Open_Image.style.display='inline'; Codehighlighter1_513_630_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_513_630_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_513_630_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;Console.WriteLine(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Standard&nbsp;implementation&nbsp;-&nbsp;print&nbsp;string&nbsp;as&nbsp;is</SPAN><SPAN style="COLOR: #000000">"</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;Console.WriteLine(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">string&nbsp;=&nbsp;{0}</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,&nbsp;str);<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/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;DerivedImplementation_One&nbsp;:&nbsp;Implementation&nbsp;<BR><IMG id=Codehighlighter1_690_820_Open_Image onclick="this.style.display='none'; Codehighlighter1_690_820_Open_Text.style.display='none'; Codehighlighter1_690_820_Closed_Image.style.display='inline'; Codehighlighter1_690_820_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_690_820_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_690_820_Closed_Text.style.display='none'; Codehighlighter1_690_820_Open_Image.style.display='inline'; Codehighlighter1_690_820_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_690_820_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_690_820_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">override</SPAN><SPAN style="COLOR: #000000">&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;DoStringOp(</SPAN><SPAN style="COLOR: #0000ff">string</SPAN><SPAN style="COLOR: #000000">&nbsp;str)<BR><IMG id=Codehighlighter1_740_816_Open_Image onclick="this.style.display='none'; Codehighlighter1_740_816_Open_Text.style.display='none'; Codehighlighter1_740_816_Closed_Image.style.display='inline'; Codehighlighter1_740_816_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_740_816_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_740_816_Closed_Text.style.display='none'; Codehighlighter1_740_816_Open_Image.style.display='inline'; Codehighlighter1_740_816_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_740_816_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_740_816_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;Console.WriteLine(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">DerivedImplementation_One&nbsp;-&nbsp;don't&nbsp;print&nbsp;string</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">&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;DerivedImplementation_Two&nbsp;:&nbsp;Implementation&nbsp;<BR><IMG id=Codehighlighter1_875_1091_Open_Image onclick="this.style.display='none'; Codehighlighter1_875_1091_Open_Text.style.display='none'; Codehighlighter1_875_1091_Closed_Image.style.display='inline'; Codehighlighter1_875_1091_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_875_1091_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_875_1091_Closed_Text.style.display='none'; Codehighlighter1_875_1091_Open_Image.style.display='inline'; Codehighlighter1_875_1091_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_875_1091_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_875_1091_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">override</SPAN><SPAN style="COLOR: #000000">&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;DoStringOp(</SPAN><SPAN style="COLOR: #0000ff">string</SPAN><SPAN style="COLOR: #000000">&nbsp;str)<BR><IMG id=Codehighlighter1_925_1087_Open_Image onclick="this.style.display='none'; Codehighlighter1_925_1087_Open_Text.style.display='none'; Codehighlighter1_925_1087_Closed_Image.style.display='inline'; Codehighlighter1_925_1087_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_925_1087_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_925_1087_Closed_Text.style.display='none'; Codehighlighter1_925_1087_Open_Image.style.display='inline'; Codehighlighter1_925_1087_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_925_1087_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_925_1087_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;Console.WriteLine(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">DerivedImplementation_Two&nbsp;-&nbsp;print&nbsp;string&nbsp;twice</SPAN><SPAN style="COLOR: #000000">"</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;Console.WriteLine(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">string&nbsp;=&nbsp;{0}</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,&nbsp;str);<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;Console.WriteLine(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">string&nbsp;=&nbsp;{0}</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,&nbsp;str);<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;<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_1099_1174_Open_Image onclick="this.style.display='none'; Codehighlighter1_1099_1174_Open_Text.style.display='none'; Codehighlighter1_1099_1174_Closed_Image.style.display='inline'; Codehighlighter1_1099_1174_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_1099_1174_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1099_1174_Closed_Text.style.display='none'; Codehighlighter1_1099_1174_Open_Image.style.display='inline'; Codehighlighter1_1099_1174_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_1099_1174_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_1099_1174_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_1203_2073_Open_Image onclick="this.style.display='none'; Codehighlighter1_1203_2073_Open_Text.style.display='none'; Codehighlighter1_1203_2073_Closed_Image.style.display='inline'; Codehighlighter1_1203_2073_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_1203_2073_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1203_2073_Closed_Text.style.display='none'; Codehighlighter1_1203_2073_Open_Image.style.display='inline'; Codehighlighter1_1203_2073_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_1203_2073_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_1203_2073_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;Abstraction&nbsp;SetupMyParticularAbstraction()&nbsp;<BR><IMG id=Codehighlighter1_1259_1627_Open_Image onclick="this.style.display='none'; Codehighlighter1_1259_1627_Open_Text.style.display='none'; Codehighlighter1_1259_1627_Closed_Image.style.display='inline'; Codehighlighter1_1259_1627_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_1259_1627_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1259_1627_Closed_Text.style.display='none'; Codehighlighter1_1259_1627_Open_Image.style.display='inline'; Codehighlighter1_1259_1627_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_1259_1627_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_1259_1627_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: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;we&nbsp;localize&nbsp;to&nbsp;this&nbsp;method&nbsp;the&nbsp;decision&nbsp;which&nbsp;abstraction&nbsp;and<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: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;which&nbsp;implementation&nbsp;to&nbsp;use.&nbsp;These&nbsp;need&nbsp;to&nbsp;be&nbsp;decided&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: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;somewhere&nbsp;and&nbsp;we&nbsp;do&nbsp;it&nbsp;here.&nbsp;All&nbsp;teh&nbsp;rest&nbsp;of&nbsp;the&nbsp;client&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: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;code&nbsp;can&nbsp;work&nbsp;against&nbsp;the&nbsp;abstraction&nbsp;object.&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;&nbsp;&nbsp;&nbsp;&nbsp;Abstraction&nbsp;a&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;DerivedAbstraction_One();<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;a.SetImplementation(</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;DerivedImplementation_Two());<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;a;<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">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_1678_2067_Open_Image onclick="this.style.display='none'; Codehighlighter1_1678_2067_Open_Text.style.display='none'; Codehighlighter1_1678_2067_Closed_Image.style.display='inline'; Codehighlighter1_1678_2067_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_1678_2067_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1678_2067_Closed_Text.style.display='none'; Codehighlighter1_1678_2067_Open_Image.style.display='inline'; Codehighlighter1_1678_2067_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_1678_2067_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_1678_2067_Open_Text><SPAN style="COLOR: #000000">{&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;Client&nbsp;c&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;Client();<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;Abstraction&nbsp;a&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;c.SetupMyParticularAbstraction();<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;<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: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;From&nbsp;here&nbsp;on&nbsp;client&nbsp;code&nbsp;thinks&nbsp;it&nbsp;is&nbsp;talking&nbsp;to&nbsp;the&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: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;abstraction,&nbsp;and&nbsp;will&nbsp;not&nbsp;need&nbsp;to&nbsp;be&nbsp;changed&nbsp;as&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: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;derived&nbsp;abstractions&nbsp;are&nbsp;changed.&nbsp;<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;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;more&nbsp;client&nbsp;code&nbsp;using&nbsp;the&nbsp;abstraction&nbsp;goes&nbsp;here&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: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;.&nbsp;.&nbsp;.&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;&nbsp;&nbsp;&nbsp;&nbsp;a.DumpString(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Clipcode</SPAN><SPAN style="COLOR: #000000">"</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;&nbsp;&nbsp;&nbsp;&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/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/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align=top></SPAN></DIV><img src ="http://www.cppblog.com/mzty/aggbug/2386.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 15:43 <a href="http://www.cppblog.com/mzty/archive/2006/01/03/2386.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>模式设计c#－－结构型－－Adapter</title><link>http://www.cppblog.com/mzty/archive/2006/01/03/2385.html</link><dc:creator>梦在天涯</dc:creator><author>梦在天涯</author><pubDate>Tue, 03 Jan 2006 07:41:00 GMT</pubDate><guid>http://www.cppblog.com/mzty/archive/2006/01/03/2385.html</guid><wfw:comment>http://www.cppblog.com/mzty/comments/2385.html</wfw:comment><comments>http://www.cppblog.com/mzty/archive/2006/01/03/2385.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/mzty/comments/commentRss/2385.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mzty/services/trackbacks/2385.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 名称																		Adapter																												结构																																						 																				意图								将一个类的接口转换成客户希望的另外一个接口。A d a p t e r 模式使得原本由于接口...&nbsp;&nbsp;<a href='http://www.cppblog.com/mzty/archive/2006/01/03/2385.html'>阅读全文</a><img src ="http://www.cppblog.com/mzty/aggbug/2385.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 15:41 <a href="http://www.cppblog.com/mzty/archive/2006/01/03/2385.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>模式设计c#－－创建型－－Singleton</title><link>http://www.cppblog.com/mzty/archive/2006/01/03/2384.html</link><dc:creator>梦在天涯</dc:creator><author>梦在天涯</author><pubDate>Tue, 03 Jan 2006 06:58:00 GMT</pubDate><guid>http://www.cppblog.com/mzty/archive/2006/01/03/2384.html</guid><wfw:comment>http://www.cppblog.com/mzty/comments/2384.html</wfw:comment><comments>http://www.cppblog.com/mzty/archive/2006/01/03/2384.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/mzty/comments/commentRss/2384.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mzty/services/trackbacks/2384.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 名称																		Singleton																												结构																																														意图								保证一个类仅有一个实例，并提供一个访问它的全局访问点。																				适用性	...&nbsp;&nbsp;<a href='http://www.cppblog.com/mzty/archive/2006/01/03/2384.html'>阅读全文</a><img src ="http://www.cppblog.com/mzty/aggbug/2384.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 14:58 <a href="http://www.cppblog.com/mzty/archive/2006/01/03/2384.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>模式设计c#－－创建型－－Prototype</title><link>http://www.cppblog.com/mzty/archive/2006/01/03/2383.html</link><dc:creator>梦在天涯</dc:creator><author>梦在天涯</author><pubDate>Tue, 03 Jan 2006 06:53:00 GMT</pubDate><guid>http://www.cppblog.com/mzty/archive/2006/01/03/2383.html</guid><wfw:comment>http://www.cppblog.com/mzty/comments/2383.html</wfw:comment><comments>http://www.cppblog.com/mzty/archive/2006/01/03/2383.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/mzty/comments/commentRss/2383.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mzty/services/trackbacks/2383.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/mzty/archive/2006/01/03/2383.html'>阅读全文</a><img src ="http://www.cppblog.com/mzty/aggbug/2383.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 14:53 <a href="http://www.cppblog.com/mzty/archive/2006/01/03/2383.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>模式设计c#－－创建型－－Builder</title><link>http://www.cppblog.com/mzty/archive/2006/01/03/2381.html</link><dc:creator>梦在天涯</dc:creator><author>梦在天涯</author><pubDate>Tue, 03 Jan 2006 06:47:00 GMT</pubDate><guid>http://www.cppblog.com/mzty/archive/2006/01/03/2381.html</guid><wfw:comment>http://www.cppblog.com/mzty/comments/2381.html</wfw:comment><comments>http://www.cppblog.com/mzty/archive/2006/01/03/2381.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/mzty/comments/commentRss/2381.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mzty/services/trackbacks/2381.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/mzty/archive/2006/01/03/2381.html'>阅读全文</a><img src ="http://www.cppblog.com/mzty/aggbug/2381.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 14:47 <a href="http://www.cppblog.com/mzty/archive/2006/01/03/2381.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>模式设计c#－－创建型－－AbstractFactory</title><link>http://www.cppblog.com/mzty/archive/2006/01/03/2379.html</link><dc:creator>梦在天涯</dc:creator><author>梦在天涯</author><pubDate>Tue, 03 Jan 2006 06:43:00 GMT</pubDate><guid>http://www.cppblog.com/mzty/archive/2006/01/03/2379.html</guid><wfw:comment>http://www.cppblog.com/mzty/comments/2379.html</wfw:comment><comments>http://www.cppblog.com/mzty/archive/2006/01/03/2379.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/mzty/comments/commentRss/2379.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mzty/services/trackbacks/2379.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/mzty/archive/2006/01/03/2379.html'>阅读全文</a><img src ="http://www.cppblog.com/mzty/aggbug/2379.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 14:43 <a href="http://www.cppblog.com/mzty/archive/2006/01/03/2379.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>模式设计c#－－创建型－－factory method</title><link>http://www.cppblog.com/mzty/archive/2006/01/03/2377.html</link><dc:creator>梦在天涯</dc:creator><author>梦在天涯</author><pubDate>Tue, 03 Jan 2006 06:28:00 GMT</pubDate><guid>http://www.cppblog.com/mzty/archive/2006/01/03/2377.html</guid><wfw:comment>http://www.cppblog.com/mzty/comments/2377.html</wfw:comment><comments>http://www.cppblog.com/mzty/archive/2006/01/03/2377.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/mzty/comments/commentRss/2377.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mzty/services/trackbacks/2377.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/mzty/archive/2006/01/03/2377.html'>阅读全文</a><img src ="http://www.cppblog.com/mzty/aggbug/2377.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 14:28 <a href="http://www.cppblog.com/mzty/archive/2006/01/03/2377.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>23种经典设计模式</title><link>http://www.cppblog.com/mzty/archive/2006/01/03/2376.html</link><dc:creator>梦在天涯</dc:creator><author>梦在天涯</author><pubDate>Tue, 03 Jan 2006 06:20:00 GMT</pubDate><guid>http://www.cppblog.com/mzty/archive/2006/01/03/2376.html</guid><wfw:comment>http://www.cppblog.com/mzty/comments/2376.html</wfw:comment><comments>http://www.cppblog.com/mzty/archive/2006/01/03/2376.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mzty/comments/commentRss/2376.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mzty/services/trackbacks/2376.html</trackback:ping><description><![CDATA[<DIV align=center>
<TABLE cellSpacing=1 cellPadding=3 width="70%" align=center border=1>
<TBODY>
<TR>
<TD></TD>
<TD>创建型</TD>
<TD>结构型</TD>
<TD>行为型</TD></TR>
<TR>
<TD>类</TD>
<TD vAlign=top><A href="mk:@MSITStore:C:\Documents%20and%20Settings\xhzhu\Desktop\b91e_dpmini.chm::/设计模式迷你手册.htm#FactoryMethod">Factory Method</A> </TD>
<TD vAlign=top><A href="mk:@MSITStore:C:\Documents%20and%20Settings\xhzhu\Desktop\b91e_dpmini.chm::/设计模式迷你手册.htm#Adapter_Class">Adapter_Class</A> </TD>
<TD vAlign=top><A href="mk:@MSITStore:C:\Documents%20and%20Settings\xhzhu\Desktop\b91e_dpmini.chm::/设计模式迷你手册.htm#Interpreter">Interpreter</A><BR><A href="mk:@MSITStore:C:\Documents%20and%20Settings\xhzhu\Desktop\b91e_dpmini.chm::/设计模式迷你手册.htm#TemplateMethod">Template Method</A> </TD></TR>
<TR>
<TD>对象</TD>
<TD vAlign=top><A href="mk:@MSITStore:C:\Documents%20and%20Settings\xhzhu\Desktop\b91e_dpmini.chm::/设计模式迷你手册.htm#AbstractFactory">Abstract Factory</A><BR><A href="mk:@MSITStore:C:\Documents%20and%20Settings\xhzhu\Desktop\b91e_dpmini.chm::/设计模式迷你手册.htm#Builder">Builder</A><BR><A href="mk:@MSITStore:C:\Documents%20and%20Settings\xhzhu\Desktop\b91e_dpmini.chm::/设计模式迷你手册.htm#Prototype">Prototype</A><BR><A href="mk:@MSITStore:C:\Documents%20and%20Settings\xhzhu\Desktop\b91e_dpmini.chm::/设计模式迷你手册.htm#Singleton">Singleton</A> </TD>
<TD vAlign=top><A href="mk:@MSITStore:C:\Documents%20and%20Settings\xhzhu\Desktop\b91e_dpmini.chm::/设计模式迷你手册.htm#Adapter_Object">Adapter_Object</A><BR><A href="mk:@MSITStore:C:\Documents%20and%20Settings\xhzhu\Desktop\b91e_dpmini.chm::/设计模式迷你手册.htm#Bridge">Bridge</A><BR><A href="mk:@MSITStore:C:\Documents%20and%20Settings\xhzhu\Desktop\b91e_dpmini.chm::/设计模式迷你手册.htm#Composite">Composite</A><BR><A href="mk:@MSITStore:C:\Documents%20and%20Settings\xhzhu\Desktop\b91e_dpmini.chm::/设计模式迷你手册.htm#Decorator">Decorator</A><BR><A href="mk:@MSITStore:C:\Documents%20and%20Settings\xhzhu\Desktop\b91e_dpmini.chm::/设计模式迷你手册.htm#Facade">Facade</A><BR><A href="mk:@MSITStore:C:\Documents%20and%20Settings\xhzhu\Desktop\b91e_dpmini.chm::/设计模式迷你手册.htm#Flyweight">Flyweight</A><BR><A href="mk:@MSITStore:C:\Documents%20and%20Settings\xhzhu\Desktop\b91e_dpmini.chm::/设计模式迷你手册.htm#Proxy">Proxy</A> </TD>
<TD vAlign=top><A href="mk:@MSITStore:C:\Documents%20and%20Settings\xhzhu\Desktop\b91e_dpmini.chm::/设计模式迷你手册.htm#ChainofResponsibility">Chain of Responsibility</A><BR><A href="mk:@MSITStore:C:\Documents%20and%20Settings\xhzhu\Desktop\b91e_dpmini.chm::/设计模式迷你手册.htm#Command">Command</A><BR><A href="mk:@MSITStore:C:\Documents%20and%20Settings\xhzhu\Desktop\b91e_dpmini.chm::/设计模式迷你手册.htm#Iterator">Iterator</A><BR><A href="mk:@MSITStore:C:\Documents%20and%20Settings\xhzhu\Desktop\b91e_dpmini.chm::/设计模式迷你手册.htm#Mediator">Mediator</A><BR><A href="mk:@MSITStore:C:\Documents%20and%20Settings\xhzhu\Desktop\b91e_dpmini.chm::/设计模式迷你手册.htm#Memento">Memento</A><BR><A href="mk:@MSITStore:C:\Documents%20and%20Settings\xhzhu\Desktop\b91e_dpmini.chm::/设计模式迷你手册.htm#Observer">Observer</A><BR><A href="mk:@MSITStore:C:\Documents%20and%20Settings\xhzhu\Desktop\b91e_dpmini.chm::/设计模式迷你手册.htm#State">State</A><BR><A href="mk:@MSITStore:C:\Documents%20and%20Settings\xhzhu\Desktop\b91e_dpmini.chm::/设计模式迷你手册.htm#Strategy">Strategy</A><BR><A href="mk:@MSITStore:C:\Documents%20and%20Settings\xhzhu\Desktop\b91e_dpmini.chm::/设计模式迷你手册.htm#Visitor">Visitor</A> </TD></TR>
<TR>
<TD>概览</TD>
<TD colSpan=3><A name=OverView><IMG title=OverView src="http://www.cppblog.com/images/cppblog_com/mzty/713/r_design.bmp" useMap=#OverView border=0></A></TD></TR></TBODY></TABLE></DIV><img src ="http://www.cppblog.com/mzty/aggbug/2376.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 14:20 <a href="http://www.cppblog.com/mzty/archive/2006/01/03/2376.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>