﻿<?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++博客-创的技术博客-随笔分类-设计模式</title><link>http://www.cppblog.com/converse/category/2256.html</link><description /><language>zh-cn</language><lastBuildDate>Sat, 02 Aug 2008 07:28:34 GMT</lastBuildDate><pubDate>Sat, 02 Aug 2008 07:28:34 GMT</pubDate><ttl>60</ttl><item><title>服务器公共库开发--线程安全的singleton类, 可配置的线程锁管理类 </title><link>http://www.cppblog.com/converse/archive/2008/08/01/57798.html</link><dc:creator>创</dc:creator><author>创</author><pubDate>Fri, 01 Aug 2008 15:32:00 GMT</pubDate><guid>http://www.cppblog.com/converse/archive/2008/08/01/57798.html</guid><wfw:comment>http://www.cppblog.com/converse/comments/57798.html</wfw:comment><comments>http://www.cppblog.com/converse/archive/2008/08/01/57798.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/converse/comments/commentRss/57798.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/converse/services/trackbacks/57798.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/converse/archive/2008/08/01/57798.html'>阅读全文</a><img src ="http://www.cppblog.com/converse/aggbug/57798.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/converse/" target="_blank">创</a> 2008-08-01 23:32 <a href="http://www.cppblog.com/converse/archive/2008/08/01/57798.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常见设计模式的解析和实现(C++)文档及源码打包下载</title><link>http://www.cppblog.com/converse/archive/2006/08/11/11139.html</link><dc:creator>创</dc:creator><author>创</author><pubDate>Fri, 11 Aug 2006 12:09:00 GMT</pubDate><guid>http://www.cppblog.com/converse/archive/2006/08/11/11139.html</guid><wfw:comment>http://www.cppblog.com/converse/comments/11139.html</wfw:comment><comments>http://www.cppblog.com/converse/archive/2006/08/11/11139.html#Feedback</comments><slash:comments>45</slash:comments><wfw:commentRss>http://www.cppblog.com/converse/comments/commentRss/11139.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/converse/services/trackbacks/11139.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 常见设计模式的解析和实现(C++)文档及源码打包下载&nbsp;&nbsp;<a href='http://www.cppblog.com/converse/archive/2006/08/11/11139.html'>阅读全文</a><img src ="http://www.cppblog.com/converse/aggbug/11139.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/converse/" target="_blank">创</a> 2006-08-11 20:09 <a href="http://www.cppblog.com/converse/archive/2006/08/11/11139.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常见设计模式的解析和实现(C++)之二十一-完结篇</title><link>http://www.cppblog.com/converse/archive/2006/08/11/11134.html</link><dc:creator>创</dc:creator><author>创</author><pubDate>Fri, 11 Aug 2006 09:42:00 GMT</pubDate><guid>http://www.cppblog.com/converse/archive/2006/08/11/11134.html</guid><wfw:comment>http://www.cppblog.com/converse/comments/11134.html</wfw:comment><comments>http://www.cppblog.com/converse/archive/2006/08/11/11134.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/converse/comments/commentRss/11134.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/converse/services/trackbacks/11134.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 常见设计模式的解析和实现(C++)之二十一-完结篇&nbsp;&nbsp;<a href='http://www.cppblog.com/converse/archive/2006/08/11/11134.html'>阅读全文</a><img src ="http://www.cppblog.com/converse/aggbug/11134.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/converse/" target="_blank">创</a> 2006-08-11 17:42 <a href="http://www.cppblog.com/converse/archive/2006/08/11/11134.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常见设计模式的解析和实现(C++)之二十-Visitor模式 </title><link>http://www.cppblog.com/converse/archive/2006/08/10/11078.html</link><dc:creator>创</dc:creator><author>创</author><pubDate>Thu, 10 Aug 2006 02:03:00 GMT</pubDate><guid>http://www.cppblog.com/converse/archive/2006/08/10/11078.html</guid><wfw:comment>http://www.cppblog.com/converse/comments/11078.html</wfw:comment><comments>http://www.cppblog.com/converse/archive/2006/08/10/11078.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/converse/comments/commentRss/11078.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/converse/services/trackbacks/11078.html</trackback:ping><description><![CDATA[作用:<br />表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作.<br /><br />UML结构图:<br /><img src="http://www.cnblogs.com/images/cnblogs_com/zhenyulu/PicX00113.gif" /><br /><br />解析:<br />Visitor模式把对结点的访问封装成一个抽象基类,通过派生出不同的类生成新的访问方式.在实现的时候,在visitor抽象基类中声明了对所有不同结点进行访问的接口函数,如图中的VisitConcreateElementA函数等,这样也造成了Visitor模式的一个缺陷--新加入一个结点的时候都要添加Visitor中的对其进行访问接口函数,这样使得所有的Visitor及其派生类都要重新编译了,也就是说Visitor模式一个缺点就是添加新的结点十分困难.另外,还需要指出的是Visitor模式采用了所谓的"双重分派"的技术,拿上图来作为例子,要对某一个结点进行访问,首先需要产生一个Element的派生类对象,其次要传入一个Visitor类派生类对象来调用对应的Accept函数,也就是说,到底对哪种Element采用哪种Visitor访问,需要两次动态绑定才可以确定下来,具体的实现可以参考下面实现代码中的Main.cpp部分是如何调用这些类的.<br /><br />实现:<br />1)Visitor.h<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 id="Codehighlighter1_0_270_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_270_Open_Text.style.display='none'; Codehighlighter1_0_270_Closed_Image.style.display='inline'; Codehighlighter1_0_270_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_0_270_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_270_Closed_Text.style.display='none'; Codehighlighter1_0_270_Open_Image.style.display='inline'; Codehighlighter1_0_270_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span id="Codehighlighter1_0_270_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_0_270_Open_Text"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*******************************************************************<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    created:    2006/08/09<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    filename:     Visitor.h<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    author:        李创<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />                </span><span style="COLOR: #008000; TEXT-DECORATION: underline">http://www.cppblog.com/converse/</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" />    purpose:    Visitor模式的演示代码<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />********************************************************************</span><span style="COLOR: #008000">*/</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" />#ifndef VISITOR_H<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000"> VISITOR_H</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: #0000ff">class</span><span style="COLOR: #000000"> Visitor;<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: #0000ff">class</span><span style="COLOR: #000000"> Element<br /><img id="Codehighlighter1_340_443_Open_Image" onclick="this.style.display='none'; Codehighlighter1_340_443_Open_Text.style.display='none'; Codehighlighter1_340_443_Closed_Image.style.display='inline'; Codehighlighter1_340_443_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_340_443_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_340_443_Closed_Text.style.display='none'; Codehighlighter1_340_443_Open_Image.style.display='inline'; Codehighlighter1_340_443_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_340_443_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_340_443_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">:<br /><img id="Codehighlighter1_369_370_Open_Image" onclick="this.style.display='none'; Codehighlighter1_369_370_Open_Text.style.display='none'; Codehighlighter1_369_370_Closed_Image.style.display='inline'; Codehighlighter1_369_370_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_369_370_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_369_370_Closed_Text.style.display='none'; Codehighlighter1_369_370_Open_Image.style.display='inline'; Codehighlighter1_369_370_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">Element()</span><span id="Codehighlighter1_369_370_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_369_370_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" /><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">void</span><span style="COLOR: #000000"> Accept(Visitor </span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">rVisitor) </span><span style="COLOR: #000000">=</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/InBlock.gif" align="top" /><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_440_441_Open_Image" onclick="this.style.display='none'; Codehighlighter1_440_441_Open_Text.style.display='none'; Codehighlighter1_440_441_Closed_Image.style.display='inline'; Codehighlighter1_440_441_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_440_441_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_440_441_Closed_Text.style.display='none'; Codehighlighter1_440_441_Open_Image.style.display='inline'; Codehighlighter1_440_441_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    Element()</span><span id="Codehighlighter1_440_441_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_440_441_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">;<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: #0000ff">class</span><span style="COLOR: #000000"> ConcreateElementA<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />    : </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> Element<br /><img id="Codehighlighter1_489_574_Open_Image" onclick="this.style.display='none'; Codehighlighter1_489_574_Open_Text.style.display='none'; Codehighlighter1_489_574_Closed_Image.style.display='inline'; Codehighlighter1_489_574_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_489_574_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_489_574_Closed_Text.style.display='none'; Codehighlighter1_489_574_Open_Image.style.display='inline'; Codehighlighter1_489_574_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_489_574_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_489_574_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">:<br /><img id="Codehighlighter1_529_530_Open_Image" onclick="this.style.display='none'; Codehighlighter1_529_530_Open_Text.style.display='none'; Codehighlighter1_529_530_Closed_Image.style.display='inline'; Codehighlighter1_529_530_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_529_530_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_529_530_Closed_Text.style.display='none'; Codehighlighter1_529_530_Open_Image.style.display='inline'; Codehighlighter1_529_530_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">ConcreateElementA() </span><span id="Codehighlighter1_529_530_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_529_530_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" /><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">void</span><span style="COLOR: #000000"> Accept(Visitor </span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">rVisitor);<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: #0000ff">class</span><span style="COLOR: #000000"> ConcreateElementB<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />    : </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> Element<br /><img id="Codehighlighter1_620_705_Open_Image" onclick="this.style.display='none'; Codehighlighter1_620_705_Open_Text.style.display='none'; Codehighlighter1_620_705_Closed_Image.style.display='inline'; Codehighlighter1_620_705_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_620_705_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_620_705_Closed_Text.style.display='none'; Codehighlighter1_620_705_Open_Image.style.display='inline'; Codehighlighter1_620_705_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_620_705_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_620_705_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">:<br /><img id="Codehighlighter1_660_661_Open_Image" onclick="this.style.display='none'; Codehighlighter1_660_661_Open_Text.style.display='none'; Codehighlighter1_660_661_Closed_Image.style.display='inline'; Codehighlighter1_660_661_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_660_661_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_660_661_Closed_Text.style.display='none'; Codehighlighter1_660_661_Open_Image.style.display='inline'; Codehighlighter1_660_661_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">ConcreateElementB() </span><span id="Codehighlighter1_660_661_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_660_661_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" /><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">void</span><span style="COLOR: #000000"> Accept(Visitor </span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">rVisitor);<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: #0000ff">class</span><span style="COLOR: #000000"> Visitor<br /><img id="Codehighlighter1_723_943_Open_Image" onclick="this.style.display='none'; Codehighlighter1_723_943_Open_Text.style.display='none'; Codehighlighter1_723_943_Closed_Image.style.display='inline'; Codehighlighter1_723_943_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_723_943_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_723_943_Closed_Text.style.display='none'; Codehighlighter1_723_943_Open_Image.style.display='inline'; Codehighlighter1_723_943_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_723_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_723_943_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">:<br /><img id="Codehighlighter1_752_753_Open_Image" onclick="this.style.display='none'; Codehighlighter1_752_753_Open_Text.style.display='none'; Codehighlighter1_752_753_Closed_Image.style.display='inline'; Codehighlighter1_752_753_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_752_753_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_752_753_Closed_Text.style.display='none'; Codehighlighter1_752_753_Open_Image.style.display='inline'; Codehighlighter1_752_753_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">Visitor()</span><span id="Codehighlighter1_752_753_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_752_753_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" /><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">void</span><span style="COLOR: #000000"> VisitConcreateElementA(ConcreateElementA </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pConcreateElementA) </span><span style="COLOR: #000000">=</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/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> VisitConcreateElementB(ConcreateElementB </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pConcreateElementB) </span><span style="COLOR: #000000">=</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/InBlock.gif" align="top" /><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_940_941_Open_Image" onclick="this.style.display='none'; Codehighlighter1_940_941_Open_Text.style.display='none'; Codehighlighter1_940_941_Closed_Image.style.display='inline'; Codehighlighter1_940_941_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_940_941_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_940_941_Closed_Text.style.display='none'; Codehighlighter1_940_941_Open_Image.style.display='inline'; Codehighlighter1_940_941_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    Visitor()</span><span id="Codehighlighter1_940_941_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_940_941_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">;<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: #0000ff">class</span><span style="COLOR: #000000"> ConcreateVisitorA<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />    : </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> Visitor<br /><img id="Codehighlighter1_989_1186_Open_Image" onclick="this.style.display='none'; Codehighlighter1_989_1186_Open_Text.style.display='none'; Codehighlighter1_989_1186_Closed_Image.style.display='inline'; Codehighlighter1_989_1186_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_989_1186_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_989_1186_Closed_Text.style.display='none'; Codehighlighter1_989_1186_Open_Image.style.display='inline'; Codehighlighter1_989_1186_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_989_1186_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_989_1186_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">:<br /><img id="Codehighlighter1_1028_1029_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1028_1029_Open_Text.style.display='none'; Codehighlighter1_1028_1029_Closed_Image.style.display='inline'; Codehighlighter1_1028_1029_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1028_1029_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1028_1029_Closed_Text.style.display='none'; Codehighlighter1_1028_1029_Open_Image.style.display='inline'; Codehighlighter1_1028_1029_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">ConcreateVisitorA()</span><span id="Codehighlighter1_1028_1029_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_1028_1029_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" /><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">void</span><span style="COLOR: #000000"> VisitConcreateElementA(ConcreateElementA </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pConcreateElementA);<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">void</span><span style="COLOR: #000000"> VisitConcreateElementB(ConcreateElementB </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pConcreateElementB);<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: #0000ff">class</span><span style="COLOR: #000000"> ConcreateVisitorB<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />    : </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> Visitor<br /><img id="Codehighlighter1_1232_1429_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1232_1429_Open_Text.style.display='none'; Codehighlighter1_1232_1429_Closed_Image.style.display='inline'; Codehighlighter1_1232_1429_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_1232_1429_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1232_1429_Closed_Text.style.display='none'; Codehighlighter1_1232_1429_Open_Image.style.display='inline'; Codehighlighter1_1232_1429_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_1232_1429_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_1232_1429_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">:<br /><img id="Codehighlighter1_1271_1272_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1271_1272_Open_Text.style.display='none'; Codehighlighter1_1271_1272_Closed_Image.style.display='inline'; Codehighlighter1_1271_1272_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1271_1272_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1271_1272_Closed_Text.style.display='none'; Codehighlighter1_1271_1272_Open_Image.style.display='inline'; Codehighlighter1_1271_1272_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">ConcreateVisitorB()</span><span id="Codehighlighter1_1271_1272_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_1271_1272_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" /><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">void</span><span style="COLOR: #000000"> VisitConcreateElementA(ConcreateElementA </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pConcreateElementA);<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">void</span><span style="COLOR: #000000"> VisitConcreateElementB(ConcreateElementB </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pConcreateElementB);<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: #0000ff">#endif</span><span style="COLOR: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /> </span></div><br />2)Visitor.cpp<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 id="Codehighlighter1_0_272_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_272_Open_Text.style.display='none'; Codehighlighter1_0_272_Closed_Image.style.display='inline'; Codehighlighter1_0_272_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_0_272_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_272_Closed_Text.style.display='none'; Codehighlighter1_0_272_Open_Image.style.display='inline'; Codehighlighter1_0_272_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span id="Codehighlighter1_0_272_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_0_272_Open_Text"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*******************************************************************<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    created:    2006/08/09<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    filename:     Visitor.cpp<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    author:        李创<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />                </span><span style="COLOR: #008000; TEXT-DECORATION: underline">http://www.cppblog.com/converse/</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" />    purpose:    Visitor模式的演示代码<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />********************************************************************</span><span style="COLOR: #008000">*/</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" />#include </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Visitor.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />#include </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</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: #0000ff">void</span><span style="COLOR: #000000"> ConcreateElementA::Accept(Visitor </span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">rVisitor)<br /><img id="Codehighlighter1_367_409_Open_Image" onclick="this.style.display='none'; Codehighlighter1_367_409_Open_Text.style.display='none'; Codehighlighter1_367_409_Closed_Image.style.display='inline'; Codehighlighter1_367_409_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_367_409_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_367_409_Closed_Text.style.display='none'; Codehighlighter1_367_409_Open_Image.style.display='inline'; Codehighlighter1_367_409_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_367_409_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_367_409_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    rVisitor.VisitConcreateElementA(</span><span style="COLOR: #0000ff">this</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" /></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> ConcreateElementB::Accept(Visitor </span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">rVisitor)<br /><img id="Codehighlighter1_462_504_Open_Image" onclick="this.style.display='none'; Codehighlighter1_462_504_Open_Text.style.display='none'; Codehighlighter1_462_504_Closed_Image.style.display='inline'; Codehighlighter1_462_504_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_462_504_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_462_504_Closed_Text.style.display='none'; Codehighlighter1_462_504_Open_Image.style.display='inline'; Codehighlighter1_462_504_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_462_504_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_462_504_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    rVisitor.VisitConcreateElementB(</span><span style="COLOR: #0000ff">this</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" /></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> ConcreateVisitorA::VisitConcreateElementA(ConcreateElementA </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pConcreateElementA)<br /><img id="Codehighlighter1_593_659_Open_Image" onclick="this.style.display='none'; Codehighlighter1_593_659_Open_Text.style.display='none'; Codehighlighter1_593_659_Closed_Image.style.display='inline'; Codehighlighter1_593_659_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_593_659_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_593_659_Closed_Text.style.display='none'; Codehighlighter1_593_659_Open_Image.style.display='inline'; Codehighlighter1_593_659_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_593_659_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_593_659_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    std::cout </span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">VisitConcreateElementA By ConcreateVisitorA\n</span><span style="COLOR: #000000">"</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" /></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> ConcreateVisitorA::VisitConcreateElementB(ConcreateElementB </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pConcreateElementA)<br /><img id="Codehighlighter1_748_814_Open_Image" onclick="this.style.display='none'; Codehighlighter1_748_814_Open_Text.style.display='none'; Codehighlighter1_748_814_Closed_Image.style.display='inline'; Codehighlighter1_748_814_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_748_814_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_748_814_Closed_Text.style.display='none'; Codehighlighter1_748_814_Open_Image.style.display='inline'; Codehighlighter1_748_814_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_748_814_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_748_814_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    std::cout </span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">VisitConcreateElementB By ConcreateVisitorA\n</span><span style="COLOR: #000000">"</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" /></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> ConcreateVisitorB::VisitConcreateElementA(ConcreateElementA </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pConcreateElementA)<br /><img id="Codehighlighter1_903_969_Open_Image" onclick="this.style.display='none'; Codehighlighter1_903_969_Open_Text.style.display='none'; Codehighlighter1_903_969_Closed_Image.style.display='inline'; Codehighlighter1_903_969_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_903_969_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_903_969_Closed_Text.style.display='none'; Codehighlighter1_903_969_Open_Image.style.display='inline'; Codehighlighter1_903_969_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_903_969_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_969_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    std::cout </span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">VisitConcreateElementA By ConcreateVisitorB\n</span><span style="COLOR: #000000">"</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" /></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> ConcreateVisitorB::VisitConcreateElementB(ConcreateElementB </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pConcreateElementA)<br /><img id="Codehighlighter1_1058_1124_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1058_1124_Open_Text.style.display='none'; Codehighlighter1_1058_1124_Closed_Image.style.display='inline'; Codehighlighter1_1058_1124_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_1058_1124_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1058_1124_Closed_Text.style.display='none'; Codehighlighter1_1058_1124_Open_Image.style.display='inline'; Codehighlighter1_1058_1124_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_1058_1124_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_1058_1124_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    std::cout </span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">VisitConcreateElementB By ConcreateVisitorB\n</span><span style="COLOR: #000000">"</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><br />3)Main.cpp<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 id="Codehighlighter1_0_269_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_269_Open_Text.style.display='none'; Codehighlighter1_0_269_Closed_Image.style.display='inline'; Codehighlighter1_0_269_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_0_269_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_269_Closed_Text.style.display='none'; Codehighlighter1_0_269_Open_Image.style.display='inline'; Codehighlighter1_0_269_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span id="Codehighlighter1_0_269_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_0_269_Open_Text"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*******************************************************************<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    created:    2006/08/09<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    filename:     Main.cpp<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    author:        李创<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />                </span><span style="COLOR: #008000; TEXT-DECORATION: underline">http://www.cppblog.com/converse/</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" />    purpose:    Visitor模式的测试代码<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />********************************************************************</span><span style="COLOR: #008000">*/</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" />#include </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Visitor.h</span><span style="COLOR: #000000">"</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: #0000ff">int</span><span style="COLOR: #000000"> main()<br /><img id="Codehighlighter1_305_483_Open_Image" onclick="this.style.display='none'; Codehighlighter1_305_483_Open_Text.style.display='none'; Codehighlighter1_305_483_Closed_Image.style.display='inline'; Codehighlighter1_305_483_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_305_483_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_305_483_Closed_Text.style.display='none'; Codehighlighter1_305_483_Open_Image.style.display='inline'; Codehighlighter1_305_483_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_305_483_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_305_483_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    Visitor </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pVisitorA </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> ConcreateVisitorA();<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    Element </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pElement  </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> ConcreateElementA();<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" />    pElement</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Accept(</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pVisitorA);<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" />    delete pElement;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    delete pVisitorA;<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/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/converse/aggbug/11078.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/converse/" target="_blank">创</a> 2006-08-10 10:03 <a href="http://www.cppblog.com/converse/archive/2006/08/10/11078.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常见设计模式的解析和实现(C++)之十九-Memento模式 </title><link>http://www.cppblog.com/converse/archive/2006/08/09/11063.html</link><dc:creator>创</dc:creator><author>创</author><pubDate>Wed, 09 Aug 2006 13:41:00 GMT</pubDate><guid>http://www.cppblog.com/converse/archive/2006/08/09/11063.html</guid><wfw:comment>http://www.cppblog.com/converse/comments/11063.html</wfw:comment><comments>http://www.cppblog.com/converse/archive/2006/08/09/11063.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/converse/comments/commentRss/11063.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/converse/services/trackbacks/11063.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 常见设计模式的解析和实现(C++)之十九-Memento模式 &nbsp;&nbsp;<a href='http://www.cppblog.com/converse/archive/2006/08/09/11063.html'>阅读全文</a><img src ="http://www.cppblog.com/converse/aggbug/11063.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/converse/" target="_blank">创</a> 2006-08-09 21:41 <a href="http://www.cppblog.com/converse/archive/2006/08/09/11063.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常见设计模式的解析和实现(C++)之十八-Iterator模式</title><link>http://www.cppblog.com/converse/archive/2006/08/08/11021.html</link><dc:creator>创</dc:creator><author>创</author><pubDate>Tue, 08 Aug 2006 15:32:00 GMT</pubDate><guid>http://www.cppblog.com/converse/archive/2006/08/08/11021.html</guid><wfw:comment>http://www.cppblog.com/converse/comments/11021.html</wfw:comment><comments>http://www.cppblog.com/converse/archive/2006/08/08/11021.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/converse/comments/commentRss/11021.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/converse/services/trackbacks/11021.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 常见设计模式的解析和实现(C++)之十八-Iterator模式&nbsp;&nbsp;<a href='http://www.cppblog.com/converse/archive/2006/08/08/11021.html'>阅读全文</a><img src ="http://www.cppblog.com/converse/aggbug/11021.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/converse/" target="_blank">创</a> 2006-08-08 23:32 <a href="http://www.cppblog.com/converse/archive/2006/08/08/11021.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常见设计模式的解析和实现(C++)之十七-State模式 </title><link>http://www.cppblog.com/converse/archive/2006/08/07/10902.html</link><dc:creator>创</dc:creator><author>创</author><pubDate>Sun, 06 Aug 2006 16:02:00 GMT</pubDate><guid>http://www.cppblog.com/converse/archive/2006/08/07/10902.html</guid><wfw:comment>http://www.cppblog.com/converse/comments/10902.html</wfw:comment><comments>http://www.cppblog.com/converse/archive/2006/08/07/10902.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/converse/comments/commentRss/10902.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/converse/services/trackbacks/10902.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 常见设计模式的解析和实现(C++)之十七-State模式 &nbsp;&nbsp;<a href='http://www.cppblog.com/converse/archive/2006/08/07/10902.html'>阅读全文</a><img src ="http://www.cppblog.com/converse/aggbug/10902.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/converse/" target="_blank">创</a> 2006-08-07 00:02 <a href="http://www.cppblog.com/converse/archive/2006/08/07/10902.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常见设计模式的解析和实现(C++)之十六-Strategy模式 </title><link>http://www.cppblog.com/converse/archive/2006/08/06/10899.html</link><dc:creator>创</dc:creator><author>创</author><pubDate>Sun, 06 Aug 2006 14:22:00 GMT</pubDate><guid>http://www.cppblog.com/converse/archive/2006/08/06/10899.html</guid><wfw:comment>http://www.cppblog.com/converse/comments/10899.html</wfw:comment><comments>http://www.cppblog.com/converse/archive/2006/08/06/10899.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/converse/comments/commentRss/10899.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/converse/services/trackbacks/10899.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 常见设计模式的解析和实现(C++)之十六-Strategy模式&nbsp;&nbsp;<a href='http://www.cppblog.com/converse/archive/2006/08/06/10899.html'>阅读全文</a><img src ="http://www.cppblog.com/converse/aggbug/10899.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/converse/" target="_blank">创</a> 2006-08-06 22:22 <a href="http://www.cppblog.com/converse/archive/2006/08/06/10899.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常见设计模式的解析和实现(C++)之十五-Observer模式 </title><link>http://www.cppblog.com/converse/archive/2006/08/05/10858.html</link><dc:creator>创</dc:creator><author>创</author><pubDate>Sat, 05 Aug 2006 02:50:00 GMT</pubDate><guid>http://www.cppblog.com/converse/archive/2006/08/05/10858.html</guid><wfw:comment>http://www.cppblog.com/converse/comments/10858.html</wfw:comment><comments>http://www.cppblog.com/converse/archive/2006/08/05/10858.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/converse/comments/commentRss/10858.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/converse/services/trackbacks/10858.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 常见设计模式的解析和实现(C++)之十五-Observer模式&nbsp;&nbsp;<a href='http://www.cppblog.com/converse/archive/2006/08/05/10858.html'>阅读全文</a><img src ="http://www.cppblog.com/converse/aggbug/10858.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/converse/" target="_blank">创</a> 2006-08-05 10:50 <a href="http://www.cppblog.com/converse/archive/2006/08/05/10858.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常见设计模式的解析和实现(C++)之十四-Command模式 </title><link>http://www.cppblog.com/converse/archive/2006/08/04/10855.html</link><dc:creator>创</dc:creator><author>创</author><pubDate>Fri, 04 Aug 2006 12:52:00 GMT</pubDate><guid>http://www.cppblog.com/converse/archive/2006/08/04/10855.html</guid><wfw:comment>http://www.cppblog.com/converse/comments/10855.html</wfw:comment><comments>http://www.cppblog.com/converse/archive/2006/08/04/10855.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/converse/comments/commentRss/10855.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/converse/services/trackbacks/10855.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 常见设计模式的解析和实现(C++)之十四-Command模式&nbsp;&nbsp;<a href='http://www.cppblog.com/converse/archive/2006/08/04/10855.html'>阅读全文</a><img src ="http://www.cppblog.com/converse/aggbug/10855.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/converse/" target="_blank">创</a> 2006-08-04 20:52 <a href="http://www.cppblog.com/converse/archive/2006/08/04/10855.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常见设计模式的解析和实现(C++)之十三-FlyWeight模式</title><link>http://www.cppblog.com/converse/archive/2006/08/03/10824.html</link><dc:creator>创</dc:creator><author>创</author><pubDate>Thu, 03 Aug 2006 13:12:00 GMT</pubDate><guid>http://www.cppblog.com/converse/archive/2006/08/03/10824.html</guid><wfw:comment>http://www.cppblog.com/converse/comments/10824.html</wfw:comment><comments>http://www.cppblog.com/converse/archive/2006/08/03/10824.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/converse/comments/commentRss/10824.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/converse/services/trackbacks/10824.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 常见设计模式的解析和实现(C++)之十三-FlyWeight模式&nbsp;&nbsp;<a href='http://www.cppblog.com/converse/archive/2006/08/03/10824.html'>阅读全文</a><img src ="http://www.cppblog.com/converse/aggbug/10824.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/converse/" target="_blank">创</a> 2006-08-03 21:12 <a href="http://www.cppblog.com/converse/archive/2006/08/03/10824.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常见设计模式的解析和实现(C++)之十二-ChainOfResponsibility模式 </title><link>http://www.cppblog.com/converse/archive/2006/07/28/10663.html</link><dc:creator>创</dc:creator><author>创</author><pubDate>Fri, 28 Jul 2006 13:03:00 GMT</pubDate><guid>http://www.cppblog.com/converse/archive/2006/07/28/10663.html</guid><wfw:comment>http://www.cppblog.com/converse/comments/10663.html</wfw:comment><comments>http://www.cppblog.com/converse/archive/2006/07/28/10663.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/converse/comments/commentRss/10663.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/converse/services/trackbacks/10663.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 常见设计模式的解析和实现(C++)之十二-ChainOfResponsibility模式 &nbsp;&nbsp;<a href='http://www.cppblog.com/converse/archive/2006/07/28/10663.html'>阅读全文</a><img src ="http://www.cppblog.com/converse/aggbug/10663.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/converse/" target="_blank">创</a> 2006-07-28 21:03 <a href="http://www.cppblog.com/converse/archive/2006/07/28/10663.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常见设计模式的解析和实现(C++)之十一-TemplateMethod模式 </title><link>http://www.cppblog.com/converse/archive/2006/07/27/10614.html</link><dc:creator>创</dc:creator><author>创</author><pubDate>Thu, 27 Jul 2006 15:06:00 GMT</pubDate><guid>http://www.cppblog.com/converse/archive/2006/07/27/10614.html</guid><wfw:comment>http://www.cppblog.com/converse/comments/10614.html</wfw:comment><comments>http://www.cppblog.com/converse/archive/2006/07/27/10614.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/converse/comments/commentRss/10614.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/converse/services/trackbacks/10614.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 常见设计模式的解析和实现(C++)之十一-TemplateMethod模式 &nbsp;&nbsp;<a href='http://www.cppblog.com/converse/archive/2006/07/27/10614.html'>阅读全文</a><img src ="http://www.cppblog.com/converse/aggbug/10614.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/converse/" target="_blank">创</a> 2006-07-27 23:06 <a href="http://www.cppblog.com/converse/archive/2006/07/27/10614.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常见设计模式的解析和实现(C++)之十-Proxy模式</title><link>http://www.cppblog.com/converse/archive/2006/07/26/10569.html</link><dc:creator>创</dc:creator><author>创</author><pubDate>Wed, 26 Jul 2006 14:29:00 GMT</pubDate><guid>http://www.cppblog.com/converse/archive/2006/07/26/10569.html</guid><wfw:comment>http://www.cppblog.com/converse/comments/10569.html</wfw:comment><comments>http://www.cppblog.com/converse/archive/2006/07/26/10569.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/converse/comments/commentRss/10569.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/converse/services/trackbacks/10569.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 常见设计模式的解析和实现(C++)之十-Proxy模式&nbsp;&nbsp;<a href='http://www.cppblog.com/converse/archive/2006/07/26/10569.html'>阅读全文</a><img src ="http://www.cppblog.com/converse/aggbug/10569.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/converse/" target="_blank">创</a> 2006-07-26 22:29 <a href="http://www.cppblog.com/converse/archive/2006/07/26/10569.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常见设计模式的解析和实现(C++)之九-Decorator模式</title><link>http://www.cppblog.com/converse/archive/2006/07/25/10465.html</link><dc:creator>创</dc:creator><author>创</author><pubDate>Mon, 24 Jul 2006 18:44:00 GMT</pubDate><guid>http://www.cppblog.com/converse/archive/2006/07/25/10465.html</guid><wfw:comment>http://www.cppblog.com/converse/comments/10465.html</wfw:comment><comments>http://www.cppblog.com/converse/archive/2006/07/25/10465.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cppblog.com/converse/comments/commentRss/10465.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/converse/services/trackbacks/10465.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 常见设计模式的解析和实现(九)-Decorator模式&nbsp;&nbsp;<a href='http://www.cppblog.com/converse/archive/2006/07/25/10465.html'>阅读全文</a><img src ="http://www.cppblog.com/converse/aggbug/10465.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/converse/" target="_blank">创</a> 2006-07-25 02:44 <a href="http://www.cppblog.com/converse/archive/2006/07/25/10465.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常见设计模式的解析和实现(C++)之八-Composite模式 </title><link>http://www.cppblog.com/converse/archive/2006/07/24/10383.html</link><dc:creator>创</dc:creator><author>创</author><pubDate>Sun, 23 Jul 2006 17:01:00 GMT</pubDate><guid>http://www.cppblog.com/converse/archive/2006/07/24/10383.html</guid><wfw:comment>http://www.cppblog.com/converse/comments/10383.html</wfw:comment><comments>http://www.cppblog.com/converse/archive/2006/07/24/10383.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/converse/comments/commentRss/10383.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/converse/services/trackbacks/10383.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 常见设计模式的解析和实现(八)-Composite模式 &nbsp;&nbsp;<a href='http://www.cppblog.com/converse/archive/2006/07/24/10383.html'>阅读全文</a><img src ="http://www.cppblog.com/converse/aggbug/10383.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/converse/" target="_blank">创</a> 2006-07-24 01:01 <a href="http://www.cppblog.com/converse/archive/2006/07/24/10383.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常见设计模式的解析和实现(C++)之七-Bridge模式 </title><link>http://www.cppblog.com/converse/archive/2006/07/23/10376.html</link><dc:creator>创</dc:creator><author>创</author><pubDate>Sun, 23 Jul 2006 13:01:00 GMT</pubDate><guid>http://www.cppblog.com/converse/archive/2006/07/23/10376.html</guid><wfw:comment>http://www.cppblog.com/converse/comments/10376.html</wfw:comment><comments>http://www.cppblog.com/converse/archive/2006/07/23/10376.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/converse/comments/commentRss/10376.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/converse/services/trackbacks/10376.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 常见设计模式的解析和实现(七)-Bridge模式 &nbsp;&nbsp;<a href='http://www.cppblog.com/converse/archive/2006/07/23/10376.html'>阅读全文</a><img src ="http://www.cppblog.com/converse/aggbug/10376.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/converse/" target="_blank">创</a> 2006-07-23 21:01 <a href="http://www.cppblog.com/converse/archive/2006/07/23/10376.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常见设计模式的解析和实现(C++)之六-Adapt模式 </title><link>http://www.cppblog.com/converse/archive/2006/07/23/10373.html</link><dc:creator>创</dc:creator><author>创</author><pubDate>Sun, 23 Jul 2006 12:24:00 GMT</pubDate><guid>http://www.cppblog.com/converse/archive/2006/07/23/10373.html</guid><wfw:comment>http://www.cppblog.com/converse/comments/10373.html</wfw:comment><comments>http://www.cppblog.com/converse/archive/2006/07/23/10373.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/converse/comments/commentRss/10373.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/converse/services/trackbacks/10373.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 常见设计模式的解析和实现(六)-Adapt模式 &nbsp;&nbsp;<a href='http://www.cppblog.com/converse/archive/2006/07/23/10373.html'>阅读全文</a><img src ="http://www.cppblog.com/converse/aggbug/10373.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/converse/" target="_blank">创</a> 2006-07-23 20:24 <a href="http://www.cppblog.com/converse/archive/2006/07/23/10373.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常见设计模式的解析和实现(C++)之五-Singleton模式 </title><link>http://www.cppblog.com/converse/archive/2006/07/21/10309.html</link><dc:creator>创</dc:creator><author>创</author><pubDate>Fri, 21 Jul 2006 06:27:00 GMT</pubDate><guid>http://www.cppblog.com/converse/archive/2006/07/21/10309.html</guid><wfw:comment>http://www.cppblog.com/converse/comments/10309.html</wfw:comment><comments>http://www.cppblog.com/converse/archive/2006/07/21/10309.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/converse/comments/commentRss/10309.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/converse/services/trackbacks/10309.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 常见设计模式的解析和实现(五)-Singleton模式 &nbsp;&nbsp;<a href='http://www.cppblog.com/converse/archive/2006/07/21/10309.html'>阅读全文</a><img src ="http://www.cppblog.com/converse/aggbug/10309.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/converse/" target="_blank">创</a> 2006-07-21 14:27 <a href="http://www.cppblog.com/converse/archive/2006/07/21/10309.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常见设计模式的解析和实现(C++)之四-Prototype模式 </title><link>http://www.cppblog.com/converse/archive/2006/07/21/10307.html</link><dc:creator>创</dc:creator><author>创</author><pubDate>Fri, 21 Jul 2006 05:53:00 GMT</pubDate><guid>http://www.cppblog.com/converse/archive/2006/07/21/10307.html</guid><wfw:comment>http://www.cppblog.com/converse/comments/10307.html</wfw:comment><comments>http://www.cppblog.com/converse/archive/2006/07/21/10307.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/converse/comments/commentRss/10307.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/converse/services/trackbacks/10307.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 常见设计模式的解析和实现(四)-Prototype模式 &nbsp;&nbsp;<a href='http://www.cppblog.com/converse/archive/2006/07/21/10307.html'>阅读全文</a><img src ="http://www.cppblog.com/converse/aggbug/10307.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/converse/" target="_blank">创</a> 2006-07-21 13:53 <a href="http://www.cppblog.com/converse/archive/2006/07/21/10307.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常见设计模式的解析和实现(C++)之三-Builder模式</title><link>http://www.cppblog.com/converse/archive/2006/07/21/10305.html</link><dc:creator>创</dc:creator><author>创</author><pubDate>Fri, 21 Jul 2006 05:05:00 GMT</pubDate><guid>http://www.cppblog.com/converse/archive/2006/07/21/10305.html</guid><wfw:comment>http://www.cppblog.com/converse/comments/10305.html</wfw:comment><comments>http://www.cppblog.com/converse/archive/2006/07/21/10305.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/converse/comments/commentRss/10305.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/converse/services/trackbacks/10305.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 常见设计模式的解析和实现(三)-Builder模式 &nbsp;&nbsp;<a href='http://www.cppblog.com/converse/archive/2006/07/21/10305.html'>阅读全文</a><img src ="http://www.cppblog.com/converse/aggbug/10305.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/converse/" target="_blank">创</a> 2006-07-21 13:05 <a href="http://www.cppblog.com/converse/archive/2006/07/21/10305.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常见设计模式的解析和实现(C++)之二-Abstract Factory模式 </title><link>http://www.cppblog.com/converse/archive/2006/07/21/10282.html</link><dc:creator>创</dc:creator><author>创</author><pubDate>Thu, 20 Jul 2006 17:15:00 GMT</pubDate><guid>http://www.cppblog.com/converse/archive/2006/07/21/10282.html</guid><wfw:comment>http://www.cppblog.com/converse/comments/10282.html</wfw:comment><comments>http://www.cppblog.com/converse/archive/2006/07/21/10282.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/converse/comments/commentRss/10282.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/converse/services/trackbacks/10282.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 常见设计模式的解析和实现(二)-Abstract Factory模式 &nbsp;&nbsp;<a href='http://www.cppblog.com/converse/archive/2006/07/21/10282.html'>阅读全文</a><img src ="http://www.cppblog.com/converse/aggbug/10282.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/converse/" target="_blank">创</a> 2006-07-21 01:15 <a href="http://www.cppblog.com/converse/archive/2006/07/21/10282.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常见设计模式的解析和实现(C++)之一-Factory模式</title><link>http://www.cppblog.com/converse/archive/2006/07/20/10269.html</link><dc:creator>创</dc:creator><author>创</author><pubDate>Thu, 20 Jul 2006 13:58:00 GMT</pubDate><guid>http://www.cppblog.com/converse/archive/2006/07/20/10269.html</guid><wfw:comment>http://www.cppblog.com/converse/comments/10269.html</wfw:comment><comments>http://www.cppblog.com/converse/archive/2006/07/20/10269.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/converse/comments/commentRss/10269.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/converse/services/trackbacks/10269.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 常见设计模式的解析和实现(一)-Factory模式&nbsp;&nbsp;<a href='http://www.cppblog.com/converse/archive/2006/07/20/10269.html'>阅读全文</a><img src ="http://www.cppblog.com/converse/aggbug/10269.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/converse/" target="_blank">创</a> 2006-07-20 21:58 <a href="http://www.cppblog.com/converse/archive/2006/07/20/10269.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Builder模式和Brige模式的区别及其他~~</title><link>http://www.cppblog.com/converse/archive/2006/07/19/10203.html</link><dc:creator>创</dc:creator><author>创</author><pubDate>Tue, 18 Jul 2006 20:26:00 GMT</pubDate><guid>http://www.cppblog.com/converse/archive/2006/07/19/10203.html</guid><wfw:comment>http://www.cppblog.com/converse/comments/10203.html</wfw:comment><comments>http://www.cppblog.com/converse/archive/2006/07/19/10203.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/converse/comments/commentRss/10203.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/converse/services/trackbacks/10203.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Builder模式和Brige模式的区别及其他~~&nbsp;&nbsp;<a href='http://www.cppblog.com/converse/archive/2006/07/19/10203.html'>阅读全文</a><img src ="http://www.cppblog.com/converse/aggbug/10203.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/converse/" target="_blank">创</a> 2006-07-19 04:26 <a href="http://www.cppblog.com/converse/archive/2006/07/19/10203.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>