﻿<?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++博客-Magic World</title><link>http://www.cppblog.com/Magic1224/</link><description>                                           Programing is fun</description><language>zh-cn</language><lastBuildDate>Tue, 14 Apr 2026 23:06:17 GMT</lastBuildDate><pubDate>Tue, 14 Apr 2026 23:06:17 GMT</pubDate><ttl>60</ttl><item><title>【转】设计模式-组合模式（Composite Pattern）</title><link>http://www.cppblog.com/Magic1224/archive/2016/02/14/212813.html</link><dc:creator>Magic</dc:creator><author>Magic</author><pubDate>Sun, 14 Feb 2016 06:36:00 GMT</pubDate><guid>http://www.cppblog.com/Magic1224/archive/2016/02/14/212813.html</guid><wfw:comment>http://www.cppblog.com/Magic1224/comments/212813.html</wfw:comment><comments>http://www.cppblog.com/Magic1224/archive/2016/02/14/212813.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Magic1224/comments/commentRss/212813.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Magic1224/services/trackbacks/212813.html</trackback:ping><description><![CDATA[<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333px; line-height: 24px; background-color: #ffffff;"><strong style="margin: 0px; padding: 0px;">&nbsp; 1.概述</strong></p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333px; line-height: 24px; background-color: #ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="margin: 0px; padding: 0px; font-size: 10pt; line-height: 20px; font-family: 宋体;">组合模式有时候又叫做部分</span><span style="margin: 0px; padding: 0px; font-size: 10pt; line-height: 20px;">-</span><span style="margin: 0px; padding: 0px; font-size: 10pt; line-height: 20px; font-family: 宋体;">整体模式，它使我们树型结构的问题中，模糊了简单元素和复杂元素的概念，客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。</span></p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333px; line-height: 24px; background-color: #ffffff;"><span style="margin: 0px; padding: 0px; font-size: 10pt; line-height: 20px;">&nbsp;&nbsp;&nbsp;<strong style="margin: 0px; padding: 0px;">&nbsp;&nbsp;组合模式（Composite Pattern）：将对象组合成树形结构以表示&#8216;部分-整体&#8217;的层次结构，组合模式使得用户对单个对象和组合对象的使用具有一致性。</strong></span></p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333px; line-height: 24px; background-color: #ffffff;"><span style="margin: 0px; padding: 0px; font-size: 10pt; line-height: 20px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;组合模式结构图如下：</span></p>
<p style="margin-top: 10px; margin-bottom: 10px; margin-left: 40px; padding: 0px; color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333px; line-height: 24px; background-color: #ffffff;"></p>
<div align="center" style="margin: 0px; color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333px; line-height: 24px; background-color: #ffffff;"><img height="353" alt="" src="http://images.cnblogs.com/cnblogs_com/peida/Composite/Composite.jpg" width="578" border="0" style="margin: 0px; padding: 0px; border: 0px; max-width: 1000px;" /></div>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333px; line-height: 24px; background-color: #ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;结构图说明：</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333px; line-height: 24px; background-color: #ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;（1）Component：组合中的对象声明接口，在适当情况下实现所有类共有的默认行为，声明一个接口用于访问和管理Component的子组件。在递归结构中定义一个接口，用于访问一个父部件，并在合适的情况下实现它。（可选）</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333px; line-height: 24px; background-color: #ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;（2）Leaf:在组合中表示叶节点，叶节点没有子节点，定义对象的基本行为。</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333px; line-height: 24px; background-color: #ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;（3）Composite：定义有子部件的那些部件的行为，存储子部件并在Component接口实现与子部件有关的操作。</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333px; line-height: 24px; background-color: #ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;（4）Client:通过Component接口操作组合部件的对象。</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333px; line-height: 24px; background-color: #ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;组合模式基本代码：</p><div style="margin: 5px 0px 5px 40px; font-size: 12px !important;">
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->&nbsp; &nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">abstract</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;Component<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">protected</span>&nbsp;string&nbsp;name;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;Component(string&nbsp;name)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.name&nbsp;=&nbsp;name;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">abstract</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;Add(Component&nbsp;c);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">abstract</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;Remove(Component&nbsp;c);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">abstract</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;Display(<span style="color: #0000FF; ">int</span>&nbsp;depth);<br />&nbsp;&nbsp;&nbsp;&nbsp;}</div>
</div>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333px; line-height: 24px; background-color: #ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Composite:</p><div style="margin: 5px 0px 5px 40px; font-size: 12px !important;">
<span style="margin: 0px; padding: 0px; line-height: 1.5 !important;"><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;Composite&nbsp;:&nbsp;Component<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;List&lt;Component&gt;&nbsp;children&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;List&lt;Component&gt;();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;Composite(string&nbsp;name)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;base(name)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;override&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;Add(Component&nbsp;c)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;children.Add(c);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;override&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;Remove(Component&nbsp;c)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;children.Remove(c);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;override&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;Display(<span style="color: #0000FF; ">int</span>&nbsp;depth)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(<span style="color: #0000FF; ">new</span>&nbsp;String('-',&nbsp;depth)&nbsp;+&nbsp;name);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach&nbsp;(Component&nbsp;component&nbsp;in&nbsp;children)<br />&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;component.Display(depth&nbsp;+&nbsp;2);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}</div></span>
</div>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333px; line-height: 24px; background-color: #ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Leaf:</p>
<div style="margin: 5px 0px 5px 40px; font-size: 12px !important;">
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all">&nbsp; &nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;Leaf&nbsp;:&nbsp;Component<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;Leaf(string&nbsp;name)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;base(name)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;override&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;Add(Component&nbsp;c)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("Cannot&nbsp;add&nbsp;to&nbsp;a&nbsp;leaf");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;override&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;Remove(Component&nbsp;c)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("Cannot&nbsp;remove&nbsp;from&nbsp;a&nbsp;leaf");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;override&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;Display(<span style="color: #0000FF; ">int</span>&nbsp;depth)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(<span style="color: #0000FF; ">new</span>&nbsp;String('-',&nbsp;depth)&nbsp;+&nbsp;name);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}</div><div style="margin: 5px 0px 0px;"><span style="color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333px; line-height: 24px; background-color: #ffffff;">客户端：</span></div></div><div style="margin: 5px 0px 5px 40px; font-size: 12px !important;">
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->&nbsp; &nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;Program<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;Main(string[]&nbsp;args)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Composite&nbsp;root&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Composite("root");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root.Add(<span style="color: #0000FF; ">new</span>&nbsp;Leaf("Leaf&nbsp;A"));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root.Add(<span style="color: #0000FF; ">new</span>&nbsp;Leaf("Leaf&nbsp;B"));<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Composite&nbsp;comp&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Composite("Composite&nbsp;X");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;comp.Add(<span style="color: #0000FF; ">new</span>&nbsp;Leaf("Leaf&nbsp;XA"));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;comp.Add(<span style="color: #0000FF; ">new</span>&nbsp;Leaf("Leaf&nbsp;XB"));<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root.Add(comp);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Composite&nbsp;comp2&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Composite("Composite&nbsp;XY");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;comp2.Add(<span style="color: #0000FF; ">new</span>&nbsp;Leaf("Leaf&nbsp;XYA"));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;comp2.Add(<span style="color: #0000FF; ">new</span>&nbsp;Leaf("Leaf&nbsp;XYB"));<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;comp.Add(comp2);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root.Add(<span style="color: #0000FF; ">new</span>&nbsp;Leaf("Leaf&nbsp;C"));<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Leaf&nbsp;leaf&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Leaf("Leaf&nbsp;D");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root.Add(leaf);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root.Remove(leaf);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root.Display(1);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.Read();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}</div>
</div>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333px; line-height: 24px; background-color: #ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;可以看出，Composite类型的对象可以包含其它Component类型的对象。换而言之，Composite类型对象可以含有其它的树枝（Composite）类型或树叶（Leaf）类型的对象。</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333px; line-height: 24px; background-color: #ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;组合模式的实现根据所实现接口的区别分为两种形式，分别称为安全模式和透明模式。组合模式可以不提供父对象的管理方法，但组合模式必须在合适的地方提供子对象的管理方法（诸如：add、remove等）。安全式的组合模式要求管理聚集的方法只出现在树枝构件类中，而不出现在树叶构件中。与安全式的组合模式不同的是，透明式的组合模式要求所有的具体构件类，不论树枝构件还是树叶构件，均符合一个固定的接口。</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333px; line-height: 24px; background-color: #ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;<strong style="margin: 0px; padding: 0px;">&nbsp;透明模式：</strong>也就是说在Component中声明所有用来管理子对象的方法，其中包括Add、Remove等。这样实现Component接口的所有子类都具备了Add和Remove。这样做的好处就是叶节点和枝节点对于外界没有区别，它们具有完全一致的行为接口，但问题也很明显，因为Leaf类本身不具备Add(),Remove()方法的功能，所以实现他是没有意义的。</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333px; line-height: 24px; background-color: #ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong style="margin: 0px; padding: 0px;">安全模式：</strong>就是在Component接口中不去声明Add和Remove方法，那么子类的Leaf也就不需要去实现它，而是在Composite声明所有用来管理子类对象的方法，这样就不会出现透明模式出现的问题，不过由于不够透明，所以叶节点和枝节点将不具有相同的接口，客户端调用需要做相应的判断，带来了不便。</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333px; line-height: 24px; background-color: #ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong style="margin: 0px; padding: 0px;">2.实例（大话设计模式）</strong></p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333px; line-height: 24px; background-color: #ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;大话设计模式中的公司管理系统的结构图如下：</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333px; line-height: 24px; background-color: #ffffff;"></p>
<div align="center" style="margin: 0px; color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333px; line-height: 24px; background-color: #ffffff;"><img height="235" alt="" src="http://images.cnblogs.com/cnblogs_com/peida/Composite/Commpany.jpg" width="581" border="0" style="margin: 0px; padding: 0px; border: 0px; max-width: 1000px;" /></div>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333px; line-height: 24px; background-color: #ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;具体实现代码如下：</p>
<div style="margin: 5px 0px 5px 40px; font-size: 12px !important;"><img id="Code_Closed_Image_072707" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top" style="margin: 0px; padding: 0px; border: 0px; max-width: 1000px;" alt="" /><span id="Code_Closed_Text_072707" style="margin: 0px; border-color: gray; line-height: 1.5 !important;">CompanyComposite<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">abstract</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;Company<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">protected</span>&nbsp;string&nbsp;name;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;Company(string&nbsp;name)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.name&nbsp;=&nbsp;name;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">abstract</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;Add(Company&nbsp;c);<span style="color: #008000; ">//</span><span style="color: #008000; ">增加</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">abstract</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;Remove(Company&nbsp;c);<span style="color: #008000; ">//</span><span style="color: #008000; ">移除</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">abstract</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;Display(<span style="color: #0000FF; ">int</span>&nbsp;depth);<span style="color: #008000; ">//</span><span style="color: #008000; ">显示</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">abstract</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;LineOfDuty();<span style="color: #008000; ">//</span><span style="color: #008000; ">履行职责</span><span style="color: #008000; "><br /></span><br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;ConcreteCompany&nbsp;:&nbsp;Company<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;List&lt;Company&gt;&nbsp;children&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;List&lt;Company&gt;();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;ConcreteCompany(string&nbsp;name)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;base(name)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;override&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;Add(Company&nbsp;c)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;children.Add(c);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;override&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;Remove(Company&nbsp;c)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;children.Remove(c);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;override&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;Display(<span style="color: #0000FF; ">int</span>&nbsp;depth)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(<span style="color: #0000FF; ">new</span>&nbsp;String('-',&nbsp;depth)&nbsp;+&nbsp;name);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach&nbsp;(Company&nbsp;component&nbsp;in&nbsp;children)<br />&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;component.Display(depth&nbsp;+&nbsp;2);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">履行职责</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;override&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;LineOfDuty()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach&nbsp;(Company&nbsp;component&nbsp;in&nbsp;children)<br />&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;component.LineOfDuty();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">人力资源部</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;HRDepartment&nbsp;:&nbsp;Company<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;HRDepartment(string&nbsp;name)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;base(name)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;override&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;Add(Company&nbsp;c)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;override&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;Remove(Company&nbsp;c)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;override&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;Display(<span style="color: #0000FF; ">int</span>&nbsp;depth)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(<span style="color: #0000FF; ">new</span>&nbsp;String('-',&nbsp;depth)&nbsp;+&nbsp;name);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;override&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;LineOfDuty()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("{0}&nbsp;员工招聘培训管理",&nbsp;name);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">财务部</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;FinanceDepartment&nbsp;:&nbsp;Company<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;FinanceDepartment(string&nbsp;name)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;base(name)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;override&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;Add(Company&nbsp;c)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;override&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;Remove(Company&nbsp;c)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;override&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;Display(<span style="color: #0000FF; ">int</span>&nbsp;depth)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(<span style="color: #0000FF; ">new</span>&nbsp;String('-',&nbsp;depth)&nbsp;+&nbsp;name);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;override&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;LineOfDuty()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("{0}&nbsp;公司财务收支管理",&nbsp;name);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}</div></span></div>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333px; line-height: 24px; background-color: #ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;客户端代码：</p>
<div style="margin: 5px 0px 5px 40px; font-size: 12px !important;"><img id="Code_Closed_Image_072807" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top" style="margin: 0px; padding: 0px; border: 0px; max-width: 1000px;" alt="" /><span id="Code_Closed_Text_072807" style="margin: 0px; border-color: gray; line-height: 1.5 !important;">Code<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;Program<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;Main(string[]&nbsp;args)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ConcreteCompany&nbsp;root&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;ConcreteCompany("北京总公司");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root.Add(<span style="color: #0000FF; ">new</span>&nbsp;HRDepartment("总公司人力资源部"));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root.Add(<span style="color: #0000FF; ">new</span>&nbsp;FinanceDepartment("总公司财务部"));<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ConcreteCompany&nbsp;comp&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;ConcreteCompany("上海华东分公司");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;comp.Add(<span style="color: #0000FF; ">new</span>&nbsp;HRDepartment("华东分公司人力资源部"));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;comp.Add(<span style="color: #0000FF; ">new</span>&nbsp;FinanceDepartment("华东分公司财务部"));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root.Add(comp);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ConcreteCompany&nbsp;comp1&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;ConcreteCompany("南京办事处");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;comp1.Add(<span style="color: #0000FF; ">new</span>&nbsp;HRDepartment("南京办事处人力资源部"));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;comp1.Add(<span style="color: #0000FF; ">new</span>&nbsp;FinanceDepartment("南京办事处财务部"));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;comp.Add(comp1);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ConcreteCompany&nbsp;comp2&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;ConcreteCompany("杭州办事处");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;comp2.Add(<span style="color: #0000FF; ">new</span>&nbsp;HRDepartment("杭州办事处人力资源部"));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;comp2.Add(<span style="color: #0000FF; ">new</span>&nbsp;FinanceDepartment("杭州办事处财务部"));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;comp.Add(comp2);<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("\n结构图：");<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root.Display(1);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("\n职责：");<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root.LineOfDuty();<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.Read();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}</div></span></div>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333px; line-height: 24px; background-color: #ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在.NET中，一个典型的组合模式实例就是.NET的控件，如Button，TextBox和Label等，这些控件都是继承自Control类，该类自身包含ControlCollection的集合Controls，控件和子控件的逻辑关系如下图：</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333px; line-height: 24px; background-color: #ffffff;">&nbsp;</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333px; line-height: 24px; background-color: #ffffff;"></p>
<div align="center" style="margin: 0px; color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333px; line-height: 24px; background-color: #ffffff;"><img height="199" alt="" src="http://images.cnblogs.com/cnblogs_com/peida/Composite/Control.jpg" width="301" border="0" style="margin: 0px; padding: 0px; border: 0px; max-width: 1000px;" /></div>
<span style="color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333px; line-height: 24px; background-color: #ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong style="margin: 0px; padding: 0px; color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333px; line-height: 24px; background-color: #ffffff;">3.总结</strong>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333px; line-height: 24px; background-color: #ffffff;"></p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333px; line-height: 24px; background-color: #ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong style="margin: 0px; padding: 0px;">何时采用组合模式：</strong></p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333px; line-height: 24px; background-color: #ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.需求重要体现部分与整体的层次结构时</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333px; line-height: 24px; background-color: #ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.你希望用户忽略组合对象与单个对象的不同，用户将统一地使用组合结构中的所有对象。</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333px; line-height: 24px; background-color: #ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;<strong style="margin: 0px; padding: 0px;">&nbsp;使用效果：</strong></p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333px; line-height: 24px; background-color: #ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1．Composite模式采用树形结构来实现普遍存在的对象容器，从而将&#8220;一对多&#8221;的关系转化&#8220;一对一&#8221;的关系，使得客户代码可以一致地处理对象和对象容器，无需关心处理的是单个的对象，还是组合的对象容器。<br style="margin: 0px; padding: 0px;" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2．将&#8220;客户代码与复杂的对象容器结构&#8221;解耦是Composite模式的核心思想，解耦之后，客户代码将与纯粹的抽象接口&#8212;&#8212;而非对象容器的复内部实现结构&#8212;&#8212;发生依赖关系，从而更能&#8220;应对变化&#8221;。<br style="margin: 0px; padding: 0px;" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3．Composite模式中，是将&#8220;Add和Remove等和对象容器相关的方法&#8221;定义在&#8220;表示抽象对象的Component类&#8221;中，还是将其定义在&#8220;表示对象容器的Composite类&#8221;中，是一个关乎&#8220;透明性&#8221;和&#8220;安全性&#8221;的两难问题，需要仔细权衡。这里有可能违背面向对象的&#8220;单一职责原则&#8221;，但是对于这种特殊结构，这又是必须付出的代价。ASP.NET控件的实现在这方面为我们提供了一个很好的示范。<br style="margin: 0px; padding: 0px;" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4．Composite模式在具体实现中，可以让父对象中的子对象反向追溯；如果父对象有频繁的遍历需求，可使用缓存技巧来改善效率。<br style="margin: 0px; padding: 0px;" />
</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333px; line-height: 24px; background-color: #ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;参考资料：</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333px; line-height: 24px; background-color: #ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;大化设计模式</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333px; line-height: 24px; background-color: #ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://terrylee.cnblogs.com/archive/2006/03/11/347919.html" style="margin: 0px; padding: 0px; text-decoration: none; color: #000000; border-bottom-width: 1px; border-bottom-style: dotted; border-bottom-color: #333333;">http://terrylee.cnblogs.com/archive/2006/03/11/347919.html<br /><br />原帖地址：<br /></a></p><div>http://www.cnblogs.com/peida/archive/2008/09/09/1284686.html</div><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333px; line-height: 24px; background-color: #ffffff;"><a href="http://terrylee.cnblogs.com/archive/2006/03/11/347919.html" style="margin: 0px; padding: 0px; text-decoration: none; color: #000000; border-bottom-width: 1px; border-bottom-style: dotted; border-bottom-color: #333333;"><br /></a></p><img src ="http://www.cppblog.com/Magic1224/aggbug/212813.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Magic1224/" target="_blank">Magic</a> 2016-02-14 14:36 <a href="http://www.cppblog.com/Magic1224/archive/2016/02/14/212813.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>gcc和g++的区别</title><link>http://www.cppblog.com/Magic1224/archive/2008/04/14/47049.html</link><dc:creator>Magic</dc:creator><author>Magic</author><pubDate>Mon, 14 Apr 2008 07:42:00 GMT</pubDate><guid>http://www.cppblog.com/Magic1224/archive/2008/04/14/47049.html</guid><wfw:comment>http://www.cppblog.com/Magic1224/comments/47049.html</wfw:comment><comments>http://www.cppblog.com/Magic1224/archive/2008/04/14/47049.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Magic1224/comments/commentRss/47049.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Magic1224/services/trackbacks/47049.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 误区一:gcc只能编译c代码,g++只能编译c++代码<br>两者都可以，但是请注意：<br>1.后缀为.c的，gcc把它当作是C程序，而g++当作是c++程序；后缀为.cpp的，两者都会认为是c++程序，注意，虽然c++是c的超集，但是两者对语法的要求是有区别的。C++的语法规则更加严谨一些。&nbsp;&nbsp;<a href='http://www.cppblog.com/Magic1224/archive/2008/04/14/47049.html'>阅读全文</a><img src ="http://www.cppblog.com/Magic1224/aggbug/47049.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Magic1224/" target="_blank">Magic</a> 2008-04-14 15:42 <a href="http://www.cppblog.com/Magic1224/archive/2008/04/14/47049.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转] C/C++术语中英对照</title><link>http://www.cppblog.com/Magic1224/archive/2008/03/20/44958.html</link><dc:creator>Magic</dc:creator><author>Magic</author><pubDate>Thu, 20 Mar 2008 09:13:00 GMT</pubDate><guid>http://www.cppblog.com/Magic1224/archive/2008/03/20/44958.html</guid><wfw:comment>http://www.cppblog.com/Magic1224/comments/44958.html</wfw:comment><comments>http://www.cppblog.com/Magic1224/archive/2008/03/20/44958.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Magic1224/comments/commentRss/44958.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Magic1224/services/trackbacks/44958.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 以下是侯捷个人收集到的 C/C++ 编程方面的术语对照。请大陆朋友给我一些意见，尤其是标示 '?' 之栏位。谢谢。&nbsp;&nbsp;<a href='http://www.cppblog.com/Magic1224/archive/2008/03/20/44958.html'>阅读全文</a><img src ="http://www.cppblog.com/Magic1224/aggbug/44958.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Magic1224/" target="_blank">Magic</a> 2008-03-20 17:13 <a href="http://www.cppblog.com/Magic1224/archive/2008/03/20/44958.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>传值调用与传地址调用（传引用）</title><link>http://www.cppblog.com/Magic1224/archive/2008/03/20/44938.html</link><dc:creator>Magic</dc:creator><author>Magic</author><pubDate>Thu, 20 Mar 2008 05:52:00 GMT</pubDate><guid>http://www.cppblog.com/Magic1224/archive/2008/03/20/44938.html</guid><wfw:comment>http://www.cppblog.com/Magic1224/comments/44938.html</wfw:comment><comments>http://www.cppblog.com/Magic1224/archive/2008/03/20/44938.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Magic1224/comments/commentRss/44938.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Magic1224/services/trackbacks/44938.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: C/C++中参数传递有两种方式，传值或传地址（传引用）,通常我们要在被调用函数中改变一个变量的值就需要传地址调用方式，可是通过传递变量指针就一定是传地址调用么？&nbsp;&nbsp;<a href='http://www.cppblog.com/Magic1224/archive/2008/03/20/44938.html'>阅读全文</a><img src ="http://www.cppblog.com/Magic1224/aggbug/44938.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Magic1224/" target="_blank">Magic</a> 2008-03-20 13:52 <a href="http://www.cppblog.com/Magic1224/archive/2008/03/20/44938.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sprintf，你知道多少？</title><link>http://www.cppblog.com/Magic1224/archive/2008/03/19/44824.html</link><dc:creator>Magic</dc:creator><author>Magic</author><pubDate>Wed, 19 Mar 2008 02:12:00 GMT</pubDate><guid>http://www.cppblog.com/Magic1224/archive/2008/03/19/44824.html</guid><wfw:comment>http://www.cppblog.com/Magic1224/comments/44824.html</wfw:comment><comments>http://www.cppblog.com/Magic1224/archive/2008/03/19/44824.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Magic1224/comments/commentRss/44824.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Magic1224/services/trackbacks/44824.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: printf 可能是许多程序员在开始学习C 语言时接触到的第二个函数（我猜第一个是main），说<br>起来，自然是老朋友了，可是，你对这个老朋友了解多吗？你对它的那个孪生兄弟sprintf 了解多<br>吗？在将各种类型的数据构造成字符串时，sprintf 的强大功能很少会让你失望。&nbsp;&nbsp;<a href='http://www.cppblog.com/Magic1224/archive/2008/03/19/44824.html'>阅读全文</a><img src ="http://www.cppblog.com/Magic1224/aggbug/44824.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Magic1224/" target="_blank">Magic</a> 2008-03-19 10:12 <a href="http://www.cppblog.com/Magic1224/archive/2008/03/19/44824.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转】Linux 内核剖析</title><link>http://www.cppblog.com/Magic1224/archive/2008/03/06/43820.html</link><dc:creator>Magic</dc:creator><author>Magic</author><pubDate>Thu, 06 Mar 2008 07:35:00 GMT</pubDate><guid>http://www.cppblog.com/Magic1224/archive/2008/03/06/43820.html</guid><wfw:comment>http://www.cppblog.com/Magic1224/comments/43820.html</wfw:comment><comments>http://www.cppblog.com/Magic1224/archive/2008/03/06/43820.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Magic1224/comments/commentRss/43820.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Magic1224/services/trackbacks/43820.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Linux® 内核是一个庞大而复杂的操作系统的核心，不过尽管庞大，但是却采用子系统和分层的概念很好地进行了组织。在本文中，您将探索 Linux 内核的总体结构，并学习一些主要的子系统和核心接口。您还可以通过其他 IBM 文章的链接更深入地进行学习。&nbsp;&nbsp;<a href='http://www.cppblog.com/Magic1224/archive/2008/03/06/43820.html'>阅读全文</a><img src ="http://www.cppblog.com/Magic1224/aggbug/43820.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Magic1224/" target="_blank">Magic</a> 2008-03-06 15:35 <a href="http://www.cppblog.com/Magic1224/archive/2008/03/06/43820.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转】嵌入式设备上的 Linux 系统开发</title><link>http://www.cppblog.com/Magic1224/archive/2008/03/06/43807.html</link><dc:creator>Magic</dc:creator><author>Magic</author><pubDate>Thu, 06 Mar 2008 06:21:00 GMT</pubDate><guid>http://www.cppblog.com/Magic1224/archive/2008/03/06/43807.html</guid><wfw:comment>http://www.cppblog.com/Magic1224/comments/43807.html</wfw:comment><comments>http://www.cppblog.com/Magic1224/archive/2008/03/06/43807.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Magic1224/comments/commentRss/43807.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Magic1224/services/trackbacks/43807.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 如果您刚接触嵌入式开发，那么大量可用的引导装载程序（bootloader）、规模缩小的分发版（distribution）、文件系统和 GUI 看起来可能太多了。但是这些丰富的选项实际上是一种恩赐，允许您调整开发或用户环境以完全符合您的需要。对 Linux 嵌入式开发的概述将帮助您理解所有这些选项。&nbsp;&nbsp;<a href='http://www.cppblog.com/Magic1224/archive/2008/03/06/43807.html'>阅读全文</a><img src ="http://www.cppblog.com/Magic1224/aggbug/43807.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Magic1224/" target="_blank">Magic</a> 2008-03-06 14:21 <a href="http://www.cppblog.com/Magic1224/archive/2008/03/06/43807.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转】Linux 引导过程内幕</title><link>http://www.cppblog.com/Magic1224/archive/2008/03/06/43806.html</link><dc:creator>Magic</dc:creator><author>Magic</author><pubDate>Thu, 06 Mar 2008 06:19:00 GMT</pubDate><guid>http://www.cppblog.com/Magic1224/archive/2008/03/06/43806.html</guid><wfw:comment>http://www.cppblog.com/Magic1224/comments/43806.html</wfw:comment><comments>http://www.cppblog.com/Magic1224/archive/2008/03/06/43806.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Magic1224/comments/commentRss/43806.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Magic1224/services/trackbacks/43806.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 引导 Linux® 系统的过程包括很多阶段。不管您是引导一个标准的 x86 桌面系统，还是引导一台嵌入式的 PowerPC® 机器，很多流程都惊人地相似。本文将探索 Linux 的引导过程，从最初的引导到启动第一个用户空间应用程序。在本文介绍的过程中，您将学习到各种与引导有关的主题，例如引导加载程序、内核解压、初始 RAM 磁盘以及 Linux 引导的其他一些元素。&nbsp;&nbsp;<a href='http://www.cppblog.com/Magic1224/archive/2008/03/06/43806.html'>阅读全文</a><img src ="http://www.cppblog.com/Magic1224/aggbug/43806.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Magic1224/" target="_blank">Magic</a> 2008-03-06 14:19 <a href="http://www.cppblog.com/Magic1224/archive/2008/03/06/43806.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转】标准C++的类型转换符：static_cast、dynamic_cast、reinterpret_cast和const_cast</title><link>http://www.cppblog.com/Magic1224/archive/2008/03/05/43736.html</link><dc:creator>Magic</dc:creator><author>Magic</author><pubDate>Wed, 05 Mar 2008 03:33:00 GMT</pubDate><guid>http://www.cppblog.com/Magic1224/archive/2008/03/05/43736.html</guid><wfw:comment>http://www.cppblog.com/Magic1224/comments/43736.html</wfw:comment><comments>http://www.cppblog.com/Magic1224/archive/2008/03/05/43736.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Magic1224/comments/commentRss/43736.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Magic1224/services/trackbacks/43736.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 标准C++的类型转换符：static_cast、dynamic_cast、reinterpret_cast和const_cast&nbsp;&nbsp;<a href='http://www.cppblog.com/Magic1224/archive/2008/03/05/43736.html'>阅读全文</a><img src ="http://www.cppblog.com/Magic1224/aggbug/43736.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Magic1224/" target="_blank">Magic</a> 2008-03-05 11:33 <a href="http://www.cppblog.com/Magic1224/archive/2008/03/05/43736.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转】内存池</title><link>http://www.cppblog.com/Magic1224/archive/2008/03/04/43691.html</link><dc:creator>Magic</dc:creator><author>Magic</author><pubDate>Tue, 04 Mar 2008 08:01:00 GMT</pubDate><guid>http://www.cppblog.com/Magic1224/archive/2008/03/04/43691.html</guid><wfw:comment>http://www.cppblog.com/Magic1224/comments/43691.html</wfw:comment><comments>http://www.cppblog.com/Magic1224/archive/2008/03/04/43691.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Magic1224/comments/commentRss/43691.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Magic1224/services/trackbacks/43691.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 内存池<br>    本章首先简单介绍自定义内存池性能优化的原理，然后列举软件开发中常用的内存池的不同类型，并给出具体实现的实例。<br>&nbsp;&nbsp;<a href='http://www.cppblog.com/Magic1224/archive/2008/03/04/43691.html'>阅读全文</a><img src ="http://www.cppblog.com/Magic1224/aggbug/43691.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Magic1224/" target="_blank">Magic</a> 2008-03-04 16:01 <a href="http://www.cppblog.com/Magic1224/archive/2008/03/04/43691.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>