﻿<?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++博客-Forcus on C++-文章分类-Design Patterns</title><link>http://www.cppblog.com/daiwei920/category/16608.html</link><description>Make everything as simple as possible, but not simpler. by Albert Einstein</description><language>zh-cn</language><lastBuildDate>Sun, 27 Nov 2011 02:40:38 GMT</lastBuildDate><pubDate>Sun, 27 Nov 2011 02:40:38 GMT</pubDate><ttl>60</ttl><item><title>适配器模式（Adapter Pattern）</title><link>http://www.cppblog.com/daiwei920/articles/159997.html</link><dc:creator>CyberC++</dc:creator><author>CyberC++</author><pubDate>Sat, 12 Nov 2011 12:09:00 GMT</pubDate><guid>http://www.cppblog.com/daiwei920/articles/159997.html</guid><wfw:comment>http://www.cppblog.com/daiwei920/comments/159997.html</wfw:comment><comments>http://www.cppblog.com/daiwei920/articles/159997.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/daiwei920/comments/commentRss/159997.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/daiwei920/services/trackbacks/159997.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 摘抄： http://www.cnblogs.com/houleixx/archive/2008/03/04/1090214.html概述:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在软件开发过程中,我们要经常要复用我们以前开发的一些&#8220;现存对象&#8221;，但是这些&#8220;现存对象&#8221;并不能满足我们新的应用环境。怎样才能良好的复用这些对象...&nbsp;&nbsp;<a href='http://www.cppblog.com/daiwei920/articles/159997.html'>阅读全文</a><img src ="http://www.cppblog.com/daiwei920/aggbug/159997.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/daiwei920/" target="_blank">CyberC++</a> 2011-11-12 20:09 <a href="http://www.cppblog.com/daiwei920/articles/159997.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>UML示例图 </title><link>http://www.cppblog.com/daiwei920/articles/159996.html</link><dc:creator>CyberC++</dc:creator><author>CyberC++</author><pubDate>Sat, 12 Nov 2011 12:07:00 GMT</pubDate><guid>http://www.cppblog.com/daiwei920/articles/159996.html</guid><wfw:comment>http://www.cppblog.com/daiwei920/comments/159996.html</wfw:comment><comments>http://www.cppblog.com/daiwei920/articles/159996.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/daiwei920/comments/commentRss/159996.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/daiwei920/services/trackbacks/159996.html</trackback:ping><description><![CDATA[<span style="width: 740px" id="articlecontent" class="wenzhang_con"> 
<div class="postTitle">UML示例图 </div><span id="ob_logd7097">
<div style="text-align: center; margin: 0pt 10px 5px 0pt; width: 45px; display: inline;background: url(http://www.cppblog.com/blog/Images/digg.gif) no-repeat left top; float: right; height: 55px; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial" class="digg_list"><br /></div></span>在Visio里，包和类的关系是包含关系，将类拖入包的文件夹之后，关系就建立了，二元关联符号可以设置为：聚合、合成。<br />接口：空心圆+直线（唐老鸭类实现了'讲人话&#8217;）；<br />依赖：虚线+箭头（动物和空气的关系）；<br />关联：实线+箭头（企鹅需要知道气候才迁移）；<br />聚合：空心四边形+实线+箭头（雁群和大雁的关系）；<br />合成：实心四边形+实线+箭头（鸟和翅膀的关系）；<br />泛化：空心三角形+实线（动物和鸟的继承关系）；<br />实现：空心三角形+虚线（实现大雁飞翔的接口）； 
<div align="left"><span style="color: red; font-size: 14pt"><strong></strong></span>&nbsp;</div>
<div align="center"><strong>UML类图</strong>&nbsp;&nbsp; </div>
<dl>
<dt>
<div><span style="font-family: 宋体">
<div align="center"><img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/skyblue/1.jpg" /></div>解释</span><span style="font-family: 宋体">UML<span style="font-family: 宋体">类图：</span></span></div>
<dt>
<div style="text-indent: -18pt; margin-left: 18pt">1.<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">首先看&#8220;动物&#8221;矩形框，它代表一个类。该类图分为三层，第一层显示类的名称，如果是抽象类就要用斜体显示。第二层是类的特性，通常就是字段和属性。第三层是类的操作，通常是方法和行为。注意前面的符号，'</span>+<span style="font-family: 宋体">&#8217;表示</span>public, '<span style="font-family: 宋体">&#8212;</span>&#8217; <span style="font-family: 宋体">表示</span>private, '#&#8217;<span style="font-family: 宋体">表示</span>protected.&nbsp;&nbsp;&nbsp;</div>
<div align="center"><img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/skyblue/2.jpg" width="233" height="121" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div>
<dt>
<div style="text-indent: -18pt; margin-left: 18pt">2.<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&#8220;<span style="font-family: 宋体">飞翔</span>&#8221;<span style="font-family: 宋体">矩形框表示一个接口图，它与类图的区别主要是顶端有《</span>interface<span style="font-family: 宋体">》显示，第一行是接口名称，第二行是接口方法。接口还有另一种表示方法，俗称棒棒糖表示法，就是唐老鸭类实现了&#8220;讲人话&#8221;的接口。</span>&nbsp;<span style="font-family: 宋体">&nbsp; </span></div>
<dt>
<div style="text-indent: -18pt; margin-left: 18pt">
<div align="center"><img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/skyblue/3.jpg" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div></div>
<dt>
<div align="left">
<div style="font-family: Verdana">
<div align="left"><span style="color: #0000ff">interface</span><span style="color: #000000">&nbsp;IFly&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span><span style="color: #0000ff">interface</span><span style="color: #000000">&nbsp;Ilanguage&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Fly();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Speak();<br />}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</span></div></div></div>
<dt><span style="font-family: 宋体"></span><br />
<dt>
<div style="text-indent: -18pt; margin-left: 18pt">3.<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">动物，鸟，鸭，唐老鸭他们之间都是继承的关系，<span style="color: red"><span style="font-family: 宋体">继承关系用空心三角形</span>+<span style="font-family: 宋体">实现来表示</span></span></span><span style="font-family: 宋体">。</span>&nbsp;&nbsp;&nbsp;</div>
<dt>
<div style="text-indent: -18pt; margin-left: 18pt">&nbsp; 
<div align="center"><img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/skyblue/4.jpg" width="236" height="249" /></div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; </div>
<dt>
<div style="text-indent: -18pt; margin-left: 18pt"></div><br />
<dt>
<div style="text-indent: -18pt; margin-left: 18pt"><span style="font-family: 宋体">4.&#8220;大雁&#8221;实现了&#8220;飞翔&#8221;接口。<span style="color: red"><span style="font-family: 宋体">实现接口用</span><span style="font-family: 宋体">空心三角形</span>+<span style="font-family: 宋体">虚线来表示</span></span></span><span style="font-family: 宋体">。（<span style="background-color: yellow">注：下面的图中应为空心三角形</span>）</span></div>
<dt>
<div style="text-indent: -18pt; margin-left: 18pt"><span style="font-family: 宋体"><span style="color: #0000ff">
<div align="center"><img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/skyblue/5.jpg" width="255" height="222" /></div></span></span></div>
<dt>
<div style="text-indent: -18pt; margin-left: 18pt"><span style="font-family: 宋体"></span></div><br />
<dt>
<div style="font-family: Verdana"><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Bird:Animal&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;WideGoose:IFly<br />{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">继承动物类&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">实现飞翔接口</span><span style="color: #008000"><br /></span><span style="color: #000000">}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<dt><span style="font-family: 宋体"></span><br />
<dt>
<div style="text-indent: -18pt; margin-left: 18pt">5.<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">企鹅与气候有很大的关系，企鹅需要&#8220;知道&#8221;气候的变化，需要&#8220;了解&#8221;气候规律。当一个类&#8220;知道&#8221;另一个类时，可以用关联</span>(association)<span style="font-family: 宋体">关系。<span style="color: red">关联关系用实线箭头来表示</span>。</span><span style="font-family: 宋体">&nbsp;&nbsp; </span></div>
<dt>
<div style="text-indent: -18pt; margin-left: 18pt" align="center"><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/skyblue/6.jpg" width="250" height="162" />&nbsp; </span></div>
<dt>
<div style="text-indent: -18pt; margin-left: 18pt" align="center"><span style="font-family: 宋体">&nbsp;</span></div>
<dt>
<div style="font-family: Verdana"><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Penguin&nbsp;:Bird<br />{<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Climate&nbsp;climate;</span><span style="color: #008000">//</span><span style="color: #008000">在企鹅Penguin中，引用到气候Climate对象</span><span style="color: #008000"><br /></span><span style="color: #000000">}</span></div>
<dt><span style="font-family: 宋体"></span><br />
<dt>
<div style="text-indent: -18pt; margin-left: 18pt">6.<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">&#8220;大雁&#8221;和&#8220;雁群&#8221;这两个类。大雁是群居动物，每只大雁都属于一个雁群，一个雁群可以有多只大雁。所以它们之间就满足聚合</span>(Aggregation)<span style="font-family: 宋体">关系。<span style="color: red"><span style="background-color: yellow"><span style="font-family: 宋体; color: #000000"><span style="font-family: 宋体; font-size: 10.5pt">聚合表示一种弱的&#8220;拥有&#8221;关系，体现的是</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt">A</span><span style="font-family: 宋体; font-size: 10.5pt">对象可以包含</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt">B</span><span style="font-family: 宋体; font-size: 10.5pt">对象，但</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt">B</span><span style="font-family: 宋体; font-size: 10.5pt">对象不是</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt">A</span><span style="font-family: 宋体; font-size: 10.5pt">对象的一部分。</span></span></span></span></span><span style="font-family: 宋体"><span style="color: red"><span style="font-family: 宋体">聚合关系用空心的菱形</span>+ <span style="font-family: 宋体">实线箭头表示</span></span></span><span style="font-family: 宋体">。</span>&nbsp;</div>
<dt>
<div style="text-indent: -18pt; margin-left: 18pt"><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #0000ff">
<div align="center"><img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/skyblue/7.jpg" width="256" height="176" /></div></span></span></div>
<dt>
<div style="text-indent: -18pt; margin-left: 18pt"><span style="font-family: 宋体"><span style="color: #0000ff"></span></span></div><br />
<dt>
<div style="font-family: Verdana"><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;WideGooseAggregate<br />{<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;WideGoose[]&nbsp;arrayWideGoose;<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">在雁群WideGooseAggregate类中，有大雁数组对象arrayWideGoose</span><span style="color: #008000"><br /></span><span style="color: #000000">}</span></div>
<dt><span style="font-family: 宋体"></span><br />
<dt>
<div style="text-indent: -18pt; margin-left: 18pt">7.<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">&#8220;鸟&#8221;和&#8220;翅膀&#8221;这两个类。鸟和翅膀似整体和部分的关系，并且翅膀和鸟的生命周期是相同的，在这里鸟和其翅膀就是合成关系。<span style="background-color: yellow"><span style="font-family: 宋体">合成</span>(composition)<span style="font-family: 宋体">是一种强的&#8220;拥有&#8221;关系，体现了严格的部分和整体的关系，部分和整体的生命周期一样</span></span></span><span style="font-family: 宋体">。<span style="color: red"><span style="font-family: 宋体">合成关系用实心的的菱形</span>+<span style="font-family: 宋体">实线箭头来表示</span></span></span><span style="font-family: 宋体">。另外，合成关系的连线两端还有一个数字&#8220;</span>1<span style="font-family: 宋体">&#8221;和数字&#8220;</span>2<span style="font-family: 宋体">&#8221;，，这被称为基数。表明这一端的类可以有几个实例，很显然，一个鸟应该有两支翅膀。如果一个类可能有无数个实例，则就用&#8220;</span>n<span style="font-family: 宋体">&#8221;来表示。关联关系，聚合关系也可以有基数的。</span><span style="font-family: 宋体"><span style="color: #0000ff"></span></span></div></dt></dl>
<dl>
<dt><span style="color: #0000ff">
<div align="center"><img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/skyblue/8.jpg" width="370" height="145" /></div></span>
<div style="font-family: Verdana"><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Bird&nbsp;<br />{<br />&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Wing&nbsp;wing;<br />&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Bird()<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wing</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Wing();<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">在鸟Bird类中，初始化时，实例化翅膀Wing,它们之间同时生成</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;}<br />}</span></div>
<dt><span style="font-family: 宋体"></span><br />
<dt>
<div style="text-indent: -18pt; margin-left: 18pt">8.<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">&#8220;动物&#8221;、&#8220;氧气&#8221;与&#8220;水&#8221;之间。动物有几大特征，比如有新陈代谢，能繁殖。而动物要有生命，需要氧气，水以及食物等。也就是说动物依赖于氧气和水。它们之间是<span style="color: red"><span style="font-family: 宋体">依赖关系</span>(Dependency),<span style="font-family: 宋体">用虚线箭头来表示</span></span></span><span style="font-family: 宋体">。</span>&nbsp;</div>
<dt>
<div style="text-indent: -18pt; margin-left: 18pt">&nbsp;</div>
<dt>
<div style="text-indent: -18pt; margin-left: 18pt"><span style="font-family: 宋体"><span style="color: #0000ff">
<div align="center"><img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/skyblue/9.jpg" width="404" height="226" /></div></span></span></div>
<dt>
<div style="text-indent: -18pt; margin-left: 18pt"><span style="font-family: 宋体"><span style="color: #0000ff"></span></span></div><br />
<dt>
<div style="font-family: Verdana"><span style="color: #0000ff">abstract</span>&nbsp;<span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Animal<br />{<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;bolism(Oxygen&nbsp;oxygen,Water&nbsp;water)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;}&nbsp;<br />}</span></div></dt></dl>转自（</span>http://www.360doc.com/content/090414/18/10587_3131518.html<span style="width: 740px" id="articlecontent" class="wenzhang_con">）</span><img src ="http://www.cppblog.com/daiwei920/aggbug/159996.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/daiwei920/" target="_blank">CyberC++</a> 2011-11-12 20:07 <a href="http://www.cppblog.com/daiwei920/articles/159996.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>UML中一些符号的意义</title><link>http://www.cppblog.com/daiwei920/articles/159995.html</link><dc:creator>CyberC++</dc:creator><author>CyberC++</author><pubDate>Sat, 12 Nov 2011 12:01:00 GMT</pubDate><guid>http://www.cppblog.com/daiwei920/articles/159995.html</guid><wfw:comment>http://www.cppblog.com/daiwei920/comments/159995.html</wfw:comment><comments>http://www.cppblog.com/daiwei920/articles/159995.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/daiwei920/comments/commentRss/159995.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/daiwei920/services/trackbacks/159995.html</trackback:ping><description><![CDATA[<center><script type="text/javascript">
/*<![CDATA[*/ if(top.location != self.location){
 top. location="self.location;
}
var" myref="encodeURIComponent("http://hi.baidu.com/luanxian/blog/item/7744330145ef1b0c7aec2ce4%2Ehtml");
/*]]">*/
</script>
<div class="userbar">
<div id="nav"><a class="logo" href="http://hi.baidu.com/index.htm"></a>
<div class="manage"><script type="text/javascript" src="http://hi.bdimg.com/static/base/js/conf/base.js?v=20111108141405"></script>
<div style="width: 996px" id="main" align="left"><script>
var objmain = document.getElementById("main");
function updatesize(){ var bodyw = window.document.body.offsetWidth; if(bodyw <= 790) objmain.style. width="772px" ; else if(bodyw >= 1016) objmain.style.width="996px"; else objmain.style.width="100%"; }
updatesize(); window.onresize = updatesize;
</script>
<div id="header">
<div class="lc">
<div class="rc"></div></div>
<div class="stage">
<div class="stagepad">
<div style="width: 100%">
<div style="overflow-x: hidden" id="m_blog" class="modbox">
<div class="tit">UML中一些符号的意义: <a href="http://hi.baidu.com/luanxian/blog/item/7744330145ef1b0c7aec2ce4.html">http://hi.baidu.com/luanxian/blog/item/7744330145ef1b0c7aec2ce4.html</a></div>
<div class="date">2007-08-03 13:43</div>
<table style="width: 100%; table-layout: fixed">
<tbody>
<tr>
<td>
<div id="blog_text" class="cnt">
<div forimg="1">
<div forimg="1">
<div forimg="1">
<div forimg="1">
<div forimg="1"></div></div></div></div></div><br />图一:<br />
<div forimg="1"><img class="blogimg" border="0" alt="" src="http://hiphotos.baidu.com/luanxian/pic/item/bd427c092b1933a72eddd481.jpg" small="0" /></div><br />
<div style="overflow-x: auto; width: 100%"><a href="http://www.azure.com.cn/uploads/200706/04_211918_1121523.jpg" target="_blank"></a></div><br /><br />此实线箭头表示, <span style="color: red">继承</span>, 从一个非接口类的继承.<br /><br />图二:<br />
<div style="overflow-x: auto; width: 100%"><a href="http://www.azure.com.cn/uploads/200706/04_212112_1121525gl.jpg" target="_blank"></a></div>
<div forimg="1"><img class="blogimg" border="0" alt="" src="http://hiphotos.baidu.com/luanxian/pic/item/9ffd3f2a8d6e8f305343c18c.jpg" small="0" /></div><br /><br />那条连线表示<span style="color: red">双向关联</span>:<br />看左边, Flight扮演assignedFights角色, 有0到1个Plane跟他关联(一个航班要么取消了没有飞机,要么只能对应一架飞机)<br />看右边, Plane扮演着assignedPlane角色, 有0到多个Flight跟他关联(一个飞机可以参与多个航班, 也可以停在仓库里面烂掉)<br /><br />图三:<br />
<div style="overflow-x: auto; width: 100%"><a href="http://www.azure.com.cn/uploads/200706/04_213002_1121526dxgl.jpg" target="_blank"></a></div>
<div forimg="1"><img class="blogimg" border="0" alt="" src="http://hiphotos.baidu.com/luanxian/pic/item/8bb24b34373daf46251f1489.jpg" small="0" /></div><br /><br />那条连线表示<span style="color: red">单向关联</span>:<br />基本的意义跟上面的是一样的, 唯一不同的是, 右边的类对左边的类是一无所知的.<br /><br />图四:<br />
<div style="overflow-x: auto; width: 100%"><a href="http://www.azure.com.cn/uploads/200706/04_213232_1121527rjb.jpg" target="_blank"></a></div><img class="blogimg" border="0" alt="" src="http://hiphotos.baidu.com/luanxian/pic/item/7f5a9a52b11bed060cf3e38b.jpg" small="0" /><br /><br />那个大的包围的框叫<span style="color: red">软件包</span>, 名字为Account, 就一些可以归类的类包装起来.<br /><br />图五:<br />
<div style="overflow-x: auto; width: 100%"><a href="http://www.azure.com.cn/uploads/200706/04_213441_1121529xjc.gif" target="_blank"></a></div><img class="blogimg" border="0" alt="" src="http://hiphotos.baidu.com/luanxian/pic/item/d2a241fb25d1346c034f5696.jpg" small="0" /><br /><br />如此虚线的箭头表示实现一个<span style="color: red">接口</span>.<br /><br />图六:<br />
<div forimg="1"><img class="blogimg" border="0" alt="" src="http://hiphotos.baidu.com/luanxian/pic/item/cf9591503f824a6a85352492.jpg" small="0" /></div><br /><br />水平的连线还是表示上面所说的关联, 但从关联连线中引伸出来的虚线, 这意味当Flight类的一个实例关联到 FrequentFlyer 类的一个实例时，<span style="color: red">将会产生 MileageCredit 类的一个实例</span>.<br /><br />图七:<br /><img class="blogimg" border="0" alt="" src="http://hiphotos.baidu.com/luanxian/pic/item/d9fcf9dec9ce135c94ee3793.jpg" small="0" /><br /><br />带菱形的箭头表示基本聚合, 由上图知道, Wheel类扮演wheels角色, 聚合4个到Car对象里面去,<br /><span style="color: red">空心的菱形表示Wheel对象并不随Car的创建而创建,销毁而销毁</span>.<br /><br />图八:<br />
<div forimg="1"><img class="blogimg" border="0" alt="" src="http://hiphotos.baidu.com/luanxian/pic/item/3c3dfc0382cf367f3912bb9d.jpg" small="0" /></div><br /><br />意义和上面类似, 唯一不同的是, <span style="color: red">实心菱形表示Department对象随Company对象的创建而创建,销毁而销毁</span>.<br /><br />图九:<br />
<div forimg="1"><img class="blogimg" border="0" alt="" src="http://hiphotos.baidu.com/luanxian/pic/item/c5b18d015ec818de277fb59e.jpg" small="0" /></div><br /><br />表示<span style="color: red">反射关联</span>, 显示一个Employee类如何通过manager / manages角色与它本身相关。当一个类关联到它本身时，这并不意味着类的实例与它本身相关，而是类的一个实例与类的另一个实例相关。<br /><br />www.azure.com.cn </div></td></tr></tbody></table>
<div id="blogOpt" class="opt">&nbsp;</div>
<div id="in_send">&nbsp;</div></div></div></div></div></div><br /></div></div></div>
<center>
<ul style="display: none" id="blogCmtContentList"></ul>
    <!--inc_getmsgnum.html-->
<script type="text/javascript" src="http://hi.bdimg.com/static/base/js/conf/comment.js?v=111"></script><script type="text/javascript" src="/ui/scripts/blog/detailpage.js?v=1.1"></script><script id="__ie_onload" defer src="//0"></script><script type="text/javascript">
/*<![CDATA[*/ var sp="SP" || {};
if(!SP.mycard){
    SP. mycard="new" (function(){
        var me="this;
"        var _cancleaction="Session.isDrag;"  
        var _list="[];
"        var _sourceloaded="false;"    
        me. bind="function" (_id){
            if(_cancleAction){  //abort
                return;
            }
            if(!_sourceLoaded){
                _list.push(_id);
            } else {
                baidu.space.mycard.bind(_id);
            }
        }
        me. init="function" (_config){ _cancleaction="!!_config.cancle;
"        }
        me. onsourceloaded="function" (){ _sourceloaded="true;
"            baidu.space.mycard.init({portrait: Session.visitorPortrait});
            for(var i="0,len=_list.length;" i<len; i++){
                baidu.space.mycard.bind(_list[i]);
            }
        }
    })();
    baidu.dom.ready(function(){
        BdAjax.loadCSS('/ui/css/ucard/ucard.css? v="020507100.css');
"        BdAjax.loadJS('/ui/scripts/ucard/ucard.js? v="020507100.js');
"    });
}
SP.mycard.bind('m_blog');  
/*]]&gt;*/
</script><script type="text/javascript">
    //*****there is some function。
    function checkMail(s)

    {

        var pattern=/\w+@\w+\.[a-z]+/;

        if(pattern.test(s))

        {

           return true;

        }

        else

       {

          return false;

       }

    }





    function checkeandu(eanduid)

    {

        var eanduvalue=baidu.G(eanduid).value;

        var len=baidu.string.getByteLength(eanduvalue);

        if(len>128)

        {

            showErr(2,"您输入的网址或邮箱太长，请保持在128字节以内。");

            return false;

        }

        else

        {

             return true;

        }



    }





    function checkname(strid)

    {

        var ele=baidu.G(strid);

        var len=baidu.string.getByteLength(ele.value);

        if(len>49)

        {

            showErr(1,"您输入的姓名太长，请保持在49字节以内。");

            return false;

        }

        else

        {

            if(len==0)

            {

                baidu.G(strid).value="匿名网友";

            }

             return true;

        }



    }



    function checktext(textid)

    {

            var tempStr='';

            var isLightFont=false;

            if(editor&&textid=="spBlogCmtText"){

                tempStr=editor.getHtml();
                
                /*
                //火星文处理，能不碰它就别碰它
                tempStr=tempStr.replace(/<span style="filter:glow\(color=#([0-9a-z]{3,6}),strength=2\);height:0px;color:#([0-9a-z]{3,6})">/ig,'');

                tempStr=tempStr.replace(/<\/span>/ig,'');
                */

                baidu.G("spBlogCmtText").value=tempStr;

                isLightFont=!(tempStr==editor.getHtml());

            }


            var str=baidu.string.trim(baidu.G(textid).value);
            baidu.G(textid).value=str;

            

            len=str.length;

            if(len==0 || ((/^[\s,　]+$/gi).test(str)) )

            {

                showErr(3,"您必须输入评论内容，请检查。");

                return false;

            }

            else

            {

                    var maxLength=isLightFont?916:1000;

                    if(len > maxLength)

                    {

                        showErr(3,"您输入的评论内容太长，请保持在500字以内。");

                        return false;

                    }

                    if(editor&&textid=="spBlogCmtText"){

                        baidu.G("spBlogCmtText").value=editor.getHtml();

                        baidu.G(textid).value=str;

                    }



                return true;

            }

    }



    function showErr(index,str)

    {

        baidu.G(index+"_err").style.display="";

        baidu.G(index+"_err_con").innerHTML=str;

    }

    function hidErr(index)

    {

        baidu.G(index+"_err").style.display="none";

        baidu.G(index+"_err_con").innerHTML="";

    }



    function alertPop(tit,con)

    {

        var pop=new Popup({ contentType:4,isReloadOnClose:false,width:340,height:80});

        pop.setContent("title",tit);

        pop.setContent("alertCon",con);

        pop.build();

        pop.show();

    }



    function cmtfull()

    {

        var cnum=0;

        if(cnum>=50000)

        {

            alertPop("发表评论","单篇日志评论数最多为50000条.");

            return false;

        }

        else

        {

            return true;

        }

    }


 function showCmtSuccess(){
  ShareBlog.showCmtShareResult(0);
 }


    function checkcmtform()

    {

        if(checkname("spBlogCmtor")&&checkeandu("spBlogCmtURL")&&checktext("spBlogCmtText")&&cmtfull())

        {
            if(baidu.g("shareBlog").checked && !ShareBlog.isHostReply){
                baidu.g("shareBlogEchoback").value = "shareblog"; 
                ShareBlog.submit(Session.spToken);
            }else{
                baidu.g("shareBlogEchoback").value = "";
            }
            location.hash = "lastcmt";
            submitForm();

            return true;

        }

        else

        {

            return false;

        }

    }



    var g_pop=null;

    function submitForm()

    {

        g_pop=new Popup({ contentType:1,isReloadOnClose:false,width:340,height:80});

        g_pop.setContent("title","添加评论");

        g_pop.setContent("contentUrl","");

        g_pop.setContent("someDisabledBtn","btn_ok");

        g_pop.build();

        G("popFormSubmit").target=g_pop.iframeIdName;

        g_pop.show();

    }



    function g_close_pop()

    {

        g_pop.close();

    }



    function formatonlinpic()

    {

        var picobj=document.getElementsByName("onlinepic");

        var picnum=picobj.length;



        for(var i=0;i<picnum;i++) {

            if(picobj[i].width>200)

            {

                picobj[i].width=200;

            }

            if(picobj[i].height>200)

            {

                picobj[i].height=200;

            }

        }

        try{baidu.G("btn_ok").disabled = "";}catch(e){}

    }



    function addToFavor(){

        var blogTitle='UML中一些符号的意义'.replace(/&#39;/g,'\'');

        window.open('http://cang.baidu.com/do/add?it='+encodeURIComponent(blogTitle+'_百度空间')+'&iu='+encodeURIComponent(location.href)+'&fr=sp#nw=1','_s','scrollbars=no,width=600,height=450,right=75,top=20,status=no,resizable=yes');

        return false;

    }

    function addToiTieba(){
        var blogTitle='UML中一些符号的意义'.replace(/&#39;/g,'\'');
        window.open('http://tieba.baidu.com/i/sys/share?link='+encodeURIComponent('http://hi.baidu.com/luanxian/blog/item/7744330145ef1b0c7aec2ce4.html')+'&type=text&title='+encodeURIComponent(blogTitle)+'&content=');
    }

    function addToShare(){
        window.open('http://apps.hi.baidu.com/share/?url='+encodeURIComponent('http://hi.baidu.com/luanxian/blog/item/7744330145ef1b0c7aec2ce4.html'));
    }


    /* some functions for cmt-reply */
    var g_cmtorInfo = [];
    function goCmtReply(cmtPorID){
        //如果是主人的话，回复别人的评论，是不需要显示分享的
        

        cmtreply(g_cmtorInfo[cmtPorID],cmtPorID);
    }
    function cmtreply(cmtName,cmtPorID)

    {

        cmtName=cmtName.replace(/<|>/g,"");

        window.location.hash="#send";

        var cmtForm=document.form1;

        cmtForm.cm.value="3";

        if(!cmtForm.spReferTarget)

        {

            var ipt=document.createElement("input");

            ipt.type="hidden";

            ipt.name="spReferTarget";

            ipt.value=cmtPorID;

            cmtForm.appendChild(ipt);

        }else cmtForm.spReferTarget.value=cmtPorID;





         //G("reTitle").innerHTML="回复"+cmtName+"：";

         G("cancleReLink").style.display="";

         cmtForm.btn_ok.value="回复评论";





         try{

            editor.window.focus();

            editor.window.document.body.innerHTML="回复"+cmtName+"：";



            var w = editor.window;

            if(w.getSelection){

                var d = w.document;

                var s = w.getSelection();

                var r = d.createRange();

                r.setStartAfter(d.body.firstChild);

                r.setEndAfter(d.body.lastChild);

                s.removeAllRanges();

                s.addRange(r);

            }

        }catch(e){

                try{

                    cmtForm.getElementsByTagName("textarea")[0].focus();

                    cmtForm.getElementsByTagName("textarea")[0].value="回复"+cmtName+"：";

                }catch(e){}

        }

    }



    function canclereply()

    {
        //主人可以分享自己的文章
        ShareBlog.cancelReply();

        var cmtForm=document.form1;

        cmtForm.cm.value="1";

        try{cmtForm.removeChild(cmtForm.spReferTarget);}catch(e){}

        /*

        try{

                var cmt=cmtForm.getElementsByTagName("textarea")[0]

                cmt.value="";

                cmt.focus();

        }catch(e){}

        */



        try{

                var ed=editor.window.document.body;

                ed.innerHTML="";

                editor.window.focus();

            }catch(e){

                var cmt=cmtForm.getElementsByTagName("textarea")[0];

                cmt.value="";

                cmt.focus();

        }



        G("cancleReLink").style.display="none";

        cmtForm.btn_ok.value="发表评论";

    }



    function gotoreply()

    {//to checking whether reply cmt

        if( window.location.hash.indexOf("&re=1")<0) return;

        var cmtid="window.location.hash.split("&")[0].replace("#","");

"        var cmtlinks="document.getElementsByTagName("a");

"        for(var i="0,n=cmtlinks.length;i<n;i++)

"        {

            if(cmtlinks[i]. name="=cmtID){" var rename="cmtlinks[i].getAttribute("rename");" repid="cmtlinks[i].getAttribute("repid");" break;}

        }

        if(typeof(rename)!="undefined"){

            cmtreply(rename, repid);

        }

    }

    
    
    function f_focus(){
        getVcode();
    }
    function getVcode(){
        var url="http://hi.baidu.com/sys/file/getvcode?echoback=getVcodeDone&t=" +(new Date().getTime());
        BdAjax.loadJS(url)
    }

    function getVcodeDone(vcode){
        document.form1.spVcode. value="vcode;
"        var imgsrc="http://hiup.baidu.com/cgi-bin/genimg?" +vcode;
        G('verifypic'). src="imgsrc;
"        G('yanzheng').style. display="block" ;
    }
    function newverifypic(){
        getVcode();
        return false;
    }

    function blogdel(str)

    {

        var pop="new" Popup({ contentType:3,isReloadOnClose:false,width:340,height:80});

        pop.setContent("title","删除文章");

        pop.setContent("confirmCon","您确定要彻底删除这篇文章及其所有评论吗？");

        pop.setContent("callBack",delCallback);

        pop.setContent("parameter",{fid:str,popup:pop});

        pop.build();

        pop.show();

        return false;

    }

    
    function delCallback(para)

    {
        if(!para["popup"])return;

        var o_pop="para["popup"];

"        o_pop.config. contenttype="1;

"        o_pop.setContent("contentUrl","");

        o_pop.reBuild();

        G(para["fid"]). target="o_pop.iframeIdName;
"        eval("document.draft"+para["fid"]).submit();

        eval("document."+para["fid"]).submit();

    }



    var _space="_Space" || {};
    
    /********这里的东西，是用来生成评论列表的**********/
   _Space. commentoperate="(function(){
"      /*blog评论的浏览*/
    var total_page="0,
" cmtnumperpage="50,
" nowpage="0,
 " count="1,
 " comment="new" Space.Pubs.Comment(Session.spSpaceDomain+"/cmt/spcmt/");
    //分页的组件
   var pager="(function" () {
 var pagenum='#p#' ;
 var max="10;
"    function getPageBar(allPn, nowPn, tplstr) {
        var max="10;
  allPn" = Number(allPn); nowpn="Number(nowPn)" + 1; 
  if (allPn <= 1) {
   return " &nbsp;";
  }
        var _html="[];
"        var startpn="Math.max(1," nowPn - Math.floor(MAX / 2));
  var endpn="Math.min(allPn," startPn + MAX - 1); startpn="Math.max(1," endPn - MAX + 1);
        if (nowPn > 1) {
   _html.push('<a', tplstr.replace('#p#', 0), '>[首页]</a> ');
   _html.push('<a', tplstr.replace('#p#', (nowPn - 1 - 1)), '>[上一页]</a> ');
  }
        for (var i = startPn; i <= endPn; i++) {
   if ( i="=" nowPn) {
    _html.push('<span>', i, '</span> ');
   } else {
    _html.push('<a', tplstr.replace('#p#', i - 1), '>[', i, ']</a> '); 
   }
  }
  if (nowPn < allPn) {
   _html.push('<a', tplstr.replace('#p#', nowPn), '>[下一页]</a> ');
   _html.push('<a', tplstr.replace('#p#', (allPn - 1)), '>[尾页]</a> ');
  }
       return _html.join('');
 }
 return {
  render: getPageBar
 }
})();

//获取评论数据后，callback，在页面上展现
var viewCallBack = function(data){
    var response = data;
    if(response.err_no == 0){
    if (response.body.data && response.body.total_count) {
        var all_page = Math.ceil(response.body.total_count / cmtNumPerPage);
        total_page = all_page - 1;
        if("#lastcmt" == location.hash){
            location.hash = ""+total_page;
            view(total_page);
            
            return;
        }
        var output = [];
        baidu.each(response.body.data, function (list) {
            output.push(generateHtml(list));

        });
        count = 1;
        baidu.G('userCommentList').innerHTML = output.join('');
        baidu.G('blogCmtCount').innerHTML = response.body.total_count;
        
        baidu.G('page').innerHTML = pager.render(all_page, nowPage, ' href="#"  onclick="_Space.commentOperate.view(#p#);return false;"');
        filterCmtContent('userCommentList');//在非ie浏览器对闪光字做处理
        SP.mycard.bind('m_blog'); 
       //锚点会让链接的颜色发生变化，用js来实现锚点功能
        var scrollObj = baidu.g("in_comment"); 
        if(scrollObj){
   scrollObj.scrollIntoView();
     }    
 
     }
 }
};
 
    var generateHtml = function(data) {
 var generateOprate = function(type,id,portraitId,cmtname,isHost, isAnnony, canReply, isMobile) {
  var data = [];
  if (isMobile) {
   data.push('  <a href="http://hi.baidu.com/hi/cms/article/help_phone/index.html" target="_blank" style="text-decoration:none;">来自手机<img src="http://img.baidu.com/hi/img/mobile.gif" align="absmiddle" border="0"  alt="" /></a>');
  }
  if (canReply && isCmtAllow) {
   if (isAnnony) {
    data.push(' | <a href="#" onclick="BdUtil.relogin();return false;">回复</a>');
   } else {
    data.push(' | <a href="#" onclick="goCmtReply(\'' + portraitId + '\');return false;">回复</a>');
   }
  }
       if (isHost) {              
   data.push(' | <a href="#" onclick="_Space.commentOperate.deleteCmt(\'' + id + '\');return false;">删除</a>');
   var cName = type==1?cmtname:'';
   data.push(' | <a href="#" onclick="userSpam.tipBlogCmt(this,\'' + cName + '\',\'' + id + '\',\'' + blogId + '\'); return false;">举报</a>');
   
 
  }
  return data.join("");
 };
    var generateUser = function(type, id, cmtname, cmturl, portraitId) {
  if ("1" == type) {
   return "<a href='{1}' target='_blank' class='ucard' pid='{2}'><img border='0' src='http://tx.bdimg.com/sys/portraitn/item/{2}.jpg'  alt="" /><br />{3}</a>".format(id, cmturl, portraitId, cmtname);
  } else {
   if (cmtname == "" || cmtname == "匿名网友") {
    if (cmturl == "") {
     return "<a>匿名网友</a>";
    } else {

     return "<a href='{1}' target='_blank' class='ucard' pid='{0}'>{2}</a>".format(portraitId, cmturl, cmtname);

    }

   } else {
    if (cmturl == "") {
     return "<div class='f14' style='display:inline'>网友:<a>{0}</a></div>".format(cmtname);
    } else {
     return "<div class='f14' style='display:inline'>网友:<a href='{1}' target='_blank' title='{1}'>{2}</a></div>".format(id, cmturl, cmtname);
    }

   }

  }
 };
    var type = 0,
 isMobile = data.reserved1,
 isHost = Session.isHost,
 isAnnony = Session.visitorPortrait == '00000000' ? true: false,
 portraitId = data.portrait,
 canReply = portraitId == Session.visitorPortrait ? false: true,
 id = data.reply_id_enc,
 cmtname = data.un,
 cmturl = cmtname ? 'http://hi.baidu.com/sys/checkuser/' + cmtname + '/1': '',
 isCmtAllow =  true ,
 blogId = "7744330145ef1b0c7aec2ce4";
 if (cmtname && cmturl && portraitId) {
  type = 1;
 }
 g_cmtorInfo[portraitId] = cmtname;

 var html = [],
        perPage = cmtNumPerPage,
        listCount = count + nowPage*perPage;
    html.push('<a name="'+id+'" rename="'+cmtname+'" repid="'+portraitId+'"></a>');
 html.push('<table width="100%" border="0" cellspacing="0" cellpadding="0" class="item" style="table-layout:fixed;word-wrap:break-word;overflow:hidden;"><tr>');
 html.push('<td valign="top" class="index" width="5%">'+listCount+'</td>');
    html.push('<td align="center" valign="top" width="10%"><div class="user" style="overflow:hidden;">');
 html.push(generateUser(type, id, cmtname, cmturl, portraitId));
 html.push('</div></td><td class="cnt" style="padding-left:20px;">');
    html.push('<span class="date">');
 var pattern='yyyy-MM-dd HH:mm';
 var date_time = new Date();
    date_time.setTime(parseInt(data.cdatetime) * 1000);
    html.push(baidu.date.format(date_time,pattern));
 html.push(generateOprate(type,id,portraitId,cmtname,isHost, isAnnony, canReply, isMobile));
 html.push("</span>")
 html.push('<div class="desc" style="overflow:hidden;word-break:normal;" name="cmtcontent">');
 html.push(data.content);
    html.push('</div></td></tr></table>');
 html.push('<div class="line">&nbsp;</div>');
 count++; 
 return html.join("");
 
};
   //获取评论列表
var  view = function(page){
   var  threadId ="7744330145ef1b0c7aec2ce4";
   page = page || 0;
   var obj={"thread_id_enc":threadId,"callback":"_Space.commentOperate.viewCallBack","start":page*cmtNumPerPage,"count":cmtNumPerPage,"orderby_type":0};
   nowPage = page;
   comment.view(obj);
};
 
 
 
            function deleteCmt(cid){
            var pop=new Popup({ contentType:3,isReloadOnClose:false,width:340,height:80});

            pop.setContent("title","删除评论");

            pop.setContent("confirmCon","您确定要彻底删除这条评论吗？");

            pop.setContent("callBack", function(){
            
                var o_pop=pop;
                var _F = baidu.G('blogCmtSubmitForm');
                _F.spBlogCmtID.value=cid;
                _F.spRefURL.value = window.location.href;

                o_pop.config.contentType=1;

                o_pop.setContent("contentUrl","");

                o_pop.reBuild();

                _F.target=o_pop.iframeIdName;

                _F.submit();
            });

            pop.build();

            pop.show();

            return false;
        }
          
    function filterCmtContent(n){

            if(!baidu.browser.ie){

                var defaultfilter1='<span style="filter:glow(color=#000000,strength=2);height:0px;color:#000000">';

                var defaultfilter2='<span style="height: 0px; color: rgb(0, 0, 0);">';

                var commentDiv=document.getElementById(n);

                var divs=commentDiv.getElementsByTagName('div');

                var d,tmp;

                for( var i=0,len=divs.length;i<len;i++){ d="divs[i];

"                    if(d.getAttribute('name')=='cmtcontent'){ tmp="d.innerHTML;

" tmp="tmp.replace(/<span" style="filter:glow\(color=#([0-9a-z]{3,6}),strength=2\);height:0px;color:#([0-9a-z]{3,6})">/ig,defaultfilter1);

                        tmp=tmp.replace('<span style="height: 0px; color: rgb(255, 255, 255);">',defaultfilter2);

                        d.innerHTML=tmp;

                    }

                }

            }

        }

        return {
            view : view,
   viewCallBack : viewCallBack,
            deleteCmt : deleteCmt
        }
        
    })();
    
    /**********分享该文章的用户功能**********/
    

    
    /*********相关文章的显示函数********/
    _Space.RelatedDoc=(function(){

        function HI_MOD_IN_RELATED_DOC_CALLBACK(arg){

            if(arg.length <= 1) return false;

            var hasmore="arg[0];

"            var d="function(A,B){A[A.length]=B;}

"            if(arg.length % 2="=" 0) D(arg, ["","","",""]);



            var html="['<div" id="in_related_doc" onclick="relative_Click()"><div class="tit">相关文章：</div>'];

            D(html, '<table cellpadding="0" cellspacing="3" border="0">');

            for(var i = 1, j = arg.length; i < j; i += 2){

                D(html, '<tr>');

                D(html, '<td width="15px"><a style="font-size:25px"  >&#8226;</a></td><td><a href="http://hi.baidu.com/' + arg[i][3] + '/blog/item/' + arg[i][2] + '.html" target="_blank" title="' + arg[i][0] + '">' + arg[i][1] + '</a>');

                D(html, new Array(10).join('\u3000'));

                D(html, '</td>');

                if(arg[i + 1][0] != "")

                    D(html, '<td width="15px"><a style="font-size:25px"  >&#8226;</a></td><td><a href="http://hi.baidu.com/' + arg[i + 1][3] + '/blog/item/' + arg[i + 1][2] + '.html" target="_blank" title="' + arg[i + 1][0] + '">' + arg[i + 1][1] + '</a></td>');

                else

                    D(html, '<td>&nbsp;</td><td>&nbsp;</td>');

                D(html, '</tr>');

            }

            if(hasMore) D(html, '<tr><td colspan="4"><a target="_blank" href="/sys/search?pageno=1&type=7&sort=1&word=UML%D6%D0%D2%BB%D0%A9%B7%FB%BA%C5%B5%C4%D2%E2%D2%E5&item=7744330145ef1b0c7aec2ce4">更多&gt;&gt;</a></td></tr>');

            D(html, '</table></div><div class="line">&nbsp;</div>');



            var div = document.getElementById('in_related_tmp');

            if(div){

                div.innerHTML = html.join('');

                while(div.firstChild){

                    div.parentNode.insertBefore(div.firstChild, div);

                }

                div.parentNode.removeChild(div);

            }


        }

        window.HI_MOD_IN_RELATED_DOC_CALLBACK = HI_MOD_IN_RELATED_DOC_CALLBACK;

        function show(){
            if( baidu.G('in_related_tmp') )
            baidu.sio.callByServer("/sys/search?type=8&word=UML%D6%D0%D2%BB%D0%A9%B7%FB%BA%C5%B5%C4%D2%E2%D2%E5&item=7744330145ef1b0c7aec2ce4");
        }

        return {
            show : show
        }

    })();
    

    /*********最近读者*********/
    _Space.latestReader=(function(){
        var g_read=[

        

        ["homesailing","7a1f686f6d657361696c696e67b206","homesailing"],

        

        ["dn%5Fweb","9bcc444e5f5765623206","DN_Web"],

        

        ["mengfhui","30fc6d656e67666875695e0e","mengfhui"],

        

        ["sinkeyeast","fb0f73696e6b657965617374fb0d","sinkeyeast"],

        

        ["jerry%5Fxing8","a61c6a657272795f78696e67385e04","jerry_xing8"],

        

        ["lingyin55","f8976c696e6779696e3535ff01","lingyin55"],

        

        ["fywz234","2f2f6679777a323334cd03","fywz234"],

        

        ["bull%5Fzhshm","107d62756c6c5f7a6873686dd102","bull_zhshm"],

        

        {}

        ];

        g_read.length=g_read.length-1;



        var _rh1="";

        var _rh2="";



        function show(){

            _rh1 += '<table width="100%"  ><tr>';

            _rh2+='<tr>';

            if(!Session.isLogin){

                _rh1+='<td align="center" width="10%"  ><img border="0" width="55" height="55" src="http://img.baidu.com/hi/img/portraitn.jpg"  alt="" /></td>';

                _rh2+='<td>&nbsp;</td>';

                if(g_read.length>0){

                    _rh1+='<td align="left" width="12%">';

                }else{

                    _rh1+='<td align="left" width="100%">';

                }

                _rh1+='<a href="https://passport.baidu.com/?login&tpl=sp&tpl_reg=sp&u='+myref+'" target="_self" onclick="BdUtil.relogin(); return false;">登录</a>后，您就出现在这里。</td>';

                _rh2+='<td>&nbsp;</td>'

            }

            if(g_read.length==0){

                if(Session.isLogin){

                    _rh1+='<td align="left" width="100%">最近还没有登录用户看过这篇文章&#8230;&#8230;</td>';

                    _rh2+='<td>&nbsp;</td>';

                }

            }else{

                for(i=0,len=g_read.length;i<len;i++){ _rh1+='<td align="center" valign="bottom" width="10%" class="user"><a href="/'+g_read[i][0]+'" target="_blank" class="ucard" pid="'+g_read[i][1]+'"><img border="0" src="http://tx.bdimg.com/sys/portraitn/item/'+g_read[i][1]+'.jpg"  alt="" /></a></td>';

                    _rh2+='<td align="center" valign="top" class="user"><a href="/'+g_read[i][0]+'" target="_blank" class="ucard" pid="'+g_read[i][1]+'">'+g_read[i][2]+'</a></td>';

                }

            }

            _rh1+='<td width="100%"></td></tr>';

            _rh2+='<td></td></tr></table>';


            baidu.dom.insertHTML("in_reader", "beforeEnd", _rh1+_rh2);

        }

        return {
            show : show
        }
    })();
    

    /*********页面完成后执行的一些东西，比较乱，小心轻放**********/
    _Space.pageDone = (function(){
        
        function initBlogTextForFCK(){
            //fck init music
            if(window.Node){Node.prototype.replaceNode=function(Node){this.parentNode.replaceChild(Node,this);}}
            var imgBox=document.getElementsByName('musicName');
            var isAutoPlay=true;
            for(var i=0,n=imgBox.length;i<n;i++){ var img="imgBox[i];
"                if(img.getAttribute('rel')){
                    var musicsrc="img.getAttribute('rel');
"                    var musicdiv="document.createElement("SPAN");
"                    var tmp="musicSrc.substr" (musicSrc.indexOf('#')+1, 1);
                    var tmpautoplay="(tmp=='1');
"                    if(isAutoPlay&&tmpAutoPlay){ isautoplay="false;
" tmpautoplay="true;
"                    }else{ tmpautoplay="false;
"                    }
                    var shtml="creatbgmusic(musicSrc.substr(0,musicSrc.indexOf('#')).replace(/[\s"><()'"]+/g,''),1,true,false,tmpautoplay,tmpautoplay,'fckmusichelper'); shtml="shtml.replace('width=100%','width=200').replace('width="100%"','width=200" height="45');   img.replaceNode(musicDiv);
"                    musicDiv. innerhtml="shtml;
"                    i--;n--;
                }
            }
                //fck init vote
            !function(){
                var vote="document.getElementsByName('FCK_VOTE');
"                for(var i="0,len=vote.length,item,rel=0,cdiv;i<len;i++){
" item="vote[0];
" rel="item.getAttribute('rel')|0;
"                    if(rel){ cdiv="document.createElement('span');
"                        item.parentNode.replaceChild(cdiv,item);
                        baidu.swf.create({
                            "id": "VOTE_FLASH_"+i,
                            "width" : "585",
                            "height": "100",
                            "ver"   : "9.0.0",
                            "wmode" : document.all ? "opaque" : "window",
                            "allowscriptaccess" : "always",
                            "url"   : "http://hi.bdimg.com/apps/appvote/spaceVote.swf? vote_id="+rel
                        },cdiv)

                    }
                }
            }()
            //document.getElementById('blog_text').style.display='';
        }
        
        function resizeBlogImg(){

            if(document.getElementById(" m_blog"))

            {

                var imgarray="document.getElementById("m_blog").getElementsByTagName('img');

"                var imgw="document.getElementById("m_blog").offsetWidth;

" imgw="imgw-40;

 "            var imgs="[]
"                for(var i="0;" i<imgarray.length; i++){
                    if(imgarray[i]. classname="="blogimg"" && imgarray[i].width  alt="" />=imgw) {
                        imgs[i]=new Image();
                        (function(_imgarray,_imgs,_i){
                            _imgs[_i].onload=function(){
                                var h=imgw/_imgs[_i].width*_imgs[_i].height;
                                _imgarray[_i].height = h;
                                _imgarray[_i].style.height=h+'px';
                            };
                        })(imgarray,imgs,i);
                        imgs[i].src=imgarray[i].src;
                        imgarray[i].width=imgw;
                        imgarray[i].style.width=imgw+'px';
                    }
                }
            }
        }

        function fixURLCopyBug(){
        
            // Fix ff bugs

            var blog_text = document.getElementById('blog_text');
            /**

            blog_text.innerHTML = blog_text.innerHTML.replace(/href\s*=\s*("|')?(\.\.\/\.\.\/)/gi,"href=$1../$2");
            */
            /*modify by poker, to fix the flashalbum's static domain*/
            var _blog_trans = blog_text.innerHTML.replace(/href\s*=\s*("|')?(\.\.\/\.\.\/)/gi,"href=$1../$2");
            _blog_trans = _blog_trans.replace(/http:\/\/hi\.baidu\.com\/static\/album\/album\.swf/g,"http://hi.bdimg.com/static/album/album.swf");
   _blog_trans = _blog_trans.replace(/`/g,"&#96;");
            blog_text.innerHTML = _blog_trans;
        }

        function getPVData(){

            var hstr="";

            baidu.sio.callByServer("/luanxian/brwstat?key1=1&key2=ddc9094f0e5dfd36aec3ab3f_7744330145ef1b0c7aec2ce4_");   
        } 

        function setpv(allnum)

        {

            var num = allnum.split('_');

            baidu.G("result").innerHTML=num[0];

        }

        window.setpv = setpv;
        
        function initCmtEditor(){ //初始化浏览编辑器
            var editor=null;

            try{

                editor=new BdEditor("spBlogCmtText",{width:"100%",height:"155px"});

                editor.onfocus = function(){hidErr(3);}

                editor.render();

                //如果用户没有登陆，焦点进入编辑器，弹出登录框
    
                var editorCont=editor.window;
    baidu.Q("ToolbarContainer",baidu.G("in_send"))[0].style.display="none";
                baidu.on(editorCont,"focus",function(){
    BdUtil.relogin();
    return false;
    });
    

            }catch(e){

                var spBlogCmtText = document.getElementById("spBlogCmtText");
                if(!spBlogCmtText ) return false;

                var p = spBlogCmtText.previousSibling;

                while(p && p.nodeType != 1) p = p.previousSibling;

                if(p && /bdeditor_container/.test(p.id)){

                    p.parentNode.removeChild(p);

                }

                spBlogCmtText.style.display = '';

                editor=null;

            }

            

            window.editor = editor;
        }

        function ok(){
            getPVData();
            resizeBlogImg();
            fixURLCopyBug();
            initBlogTextForFCK();
            initCmtEditor();

            gotoreply(); /* external fun*/
        }

        return {
            ok : ok
        }
    })();
 
 function relative_Click(){
  BdUtil.ns_trackerLink('m_20110329_relative_article','')
 }
    /********分段加载处理对象，实验性功能*********/
    _Space.SectionLoad = (function(){

        var loaded = false;

        var sectioinList = [];

        function complete(item){
            item.isComplete = true;
        }

        function add(mod, loadCallback){

            var mod = baidu.G(mod);
            
            sectioinList.push({"mod": mod, "callback":loadCallback});
        }

        function startLoad(item){
            item['callback']();
            complete(item);
        }

        function checkStat(){
            if(sectioinList.length <= 0) return;

            var pagetop2bottom="getPageTop2bottom();
"            
            baidu.each(sectioinList, function(item, index){

                if(! item.isComplete){
                    if(getOffsetTop(item.mod)-100 <= pageTop2bottom)
                        startLoad(item);
                }
            });
        }

        function getOffsetTop(mod){
            return baidu.dom.getPosition(mod).top;
        }

        function getPageTop2bottom(){
            var dsh="baidu.page.getScrollTop();
"            var dch="baidu.page.getViewHeight();

"            return dsh + dch;
        }

        
        baidu.on(window, 'resize', checkStat);
        baidu.on(window, 'onload', checkStat);
        baidu.on(window, 'scroll', checkStat);
        
        return {
            "add" : add
        } 
    })();

    /*******Start Working！*******/
    var _pageendtime="(new" Date().getTime()) - g_pageTimerStart;

    baidu.on(window, 'load', function(){
        var _pageloadtime="(new" Date().getTime()) - g_pageTimerStart;

        BdUtil.hi_trackerLink('m_20101109_blogloadtime', _pageLoadTime+'|'+_pageEndTime);
    });

    /**********Step2***********/
    _Space.pageDone.ok();

    baidu.G('share_user_list') && _Space.SectionLoad.add('share_user_list', _Space.BlogSharedUser.getData);
    baidu.G('in_related_tmp') && _Space.SectionLoad.add('in_related_tmp', _Space.RelatedDoc.show);
    baidu.G('in_reader') && _Space.SectionLoad.add('in_reader', _Space.latestReader.show);
    baidu.G('blogOpt') && _Space.SectionLoad.add('blogOpt', _Space.commentOperate.view);
</SCRIPT><script type="text/javascript" src="/ui/scripts/refer/refer.js"></script><script type="text/javascript" src="http://hitn.bdimg.com/luanxian/tnfile/item/a60f06f43d1c3bef7709d73b.js"></script><script type="text/javascript">
//页面状态变量
var Session = Session || {
    spaceURL: "/luanxian",
    pageURL: "http://hi.baidu.com/luanxian/blog/item/7744330145ef1b0c7aec2ce4%2Ehtml",    //当前访问的url
    isHost: "",         // 是否是空间主人
    userName: "nywrb",   // 空间主人用户名
    userNameEnc:    "nywrb", 
    visitorName:    "",
    visitorURL: "/index.html",        // 
    refer: "http://hi.baidu.com/lingyin55/blog/item/84b1e82c071b4eeb8b13994b.html/cmtid/7c19bd08159a80de62d98685",
    spBasicURL:"luanxian",
    spBasicURLEnc:"luanxian"
};
</script><script type="text/javascript" src="/ui/scripts/beautify/render.js"></script><script type="text/javascript">
baidu.dom.ready(function(){
    if(typeof spBeautifyConfigData != 'undefined'){
        var _installList = spBeautifyConfigData.list;
    } else {
        spBeautifyConfigData = {};
        _installList = [];
    }
    spBeautifyConfigData.currentDate  = Math.round((new Date('2011/11/12')).getTime() / 1000);    
    BeautifyWidget.init({timeStamp: spBeautifyConfigData.currentDate, env: 'sys'});
    BeautifyWidget.render(_installList);
 if(Space && Space.ActiveTip){
  if(baidu.g("active_space")){
   window.active_tip=new Space.ActiveTip("tary_space_name",function(){
    active_tip.hidden();
    //activeSpace("pop_tip");
    if(BdUtil && BdUtil.ns_trackerLink){
     BdUtil.ns_trackerLink('nm_20101018_activeBlank',''); 
    }
    window.open('http://hi.baidu.com/reg/preihome?pageDomain=pop_tip');
   // window.location.href="http://hi.baidu.com/reg/preihome?pageDomain=pop_tip";
    setTimeout(function(){
     window.location.reload();
    },1000);
    
   
   });
  }
  window.succTip=function(spaceUrl){
   active_dia.close();
   //var tiphtml="<div><div class='setBlackcon'>恭喜您，激活成功！欢迎入驻百度空间！</div><div class='setBlackpanel'><div class='blackConfirmbtn' onclick="\"goIhome('"+spaceUrl+"')\"">确认</div></div></div>";
   BdDialog.Alert("恭喜您，激活成功！欢迎入驻百度空间！");
   baidu.g("dialogYES").onclick=function(){
    window.location.reload();
   }; 
  };
 }
 
});
</script><script type="text/javascript" src="http://hi.baidu.com/hi/cms/article/quickjs/auto.js"></script><script>
try{SCD.init("http://hi.baidu.com/lingyin55/blog/item/84b1e82c071b4eeb8b13994b.html/cmtid/7c19bd08159a80de62d98685")}catch(e){}
</script><script type="text/javascript" src="http://hi.baidu.com/hi/cms/article/quickjs/blog_maidian_yali.js"></script><script type="text/javascript">
 baidu.dom.ready(function(){
  if(BlogMaiDianYali && BlogMaiDianYali.isSwitchOn) {
   var pageUrl = BlogMaiDianYali.detailPageUrl .replace("/{spaceurl}","/luanxian").replace("{blogid}","7744330145ef1b0c7aec2ce4");
   var divDom = document.createElement("div");
   divDom.innerHTML = '<iframe src="' + pageUrl + '" style="display:none;">';
   divDom.style.display = "none";
   document.body.appendChild(divDom);
  } 
 });
</script></center></center></div><img src ="http://www.cppblog.com/daiwei920/aggbug/159995.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/daiwei920/" target="_blank">CyberC++</a> 2011-11-12 20:01 <a href="http://www.cppblog.com/daiwei920/articles/159995.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>