﻿<?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>博客园-GUO's Blog About Technology Based On .Net Platform</title><link>http://www.cnblogs.com/Thriving-Country/</link><description>I love my career.做自己该做的事,做自己想做的事!</description><language>zh-cn</language><lastBuildDate>Wed, 10 Feb 2010 04:34:28 GMT</lastBuildDate><pubDate>Wed, 10 Feb 2010 04:34:28 GMT</pubDate><ttl>60</ttl><item><title>【读书笔记】《框架设计（第2版）CLR Via C#》中两个比较有趣的知识点</title><link>http://www.cnblogs.com/Thriving-Country/archive/2009/12/20/1628314.html</link><dc:creator>GUO Xingwang</dc:creator><author>GUO Xingwang</author><pubDate>Sun, 20 Dec 2009 09:18:00 GMT</pubDate><guid>http://www.cnblogs.com/Thriving-Country/archive/2009/12/20/1628314.html</guid><description><![CDATA[<p>阅读: 1393 评论: 8 作者: <a href="http://www.cnblogs.com/Thriving-Country/" target="_blank">GUO Xingwang</a> 发表于 2009-12-20 17:18 <a href="http://www.cnblogs.com/Thriving-Country/archive/2009/12/20/1628314.html" target="_blank">原文链接</a></p><p>　　<span style="font-size: 10pt">本季度公司要求阅读《框架设计（第2版）CLR Via C#》这本书，由于前两个月一直很忙，也没有时间阅读，偶尔阅读也是很晚回家以后临睡前拿起这经典之作读那么一个小节。最近利用周末可以说一鼓作气的看了大半本，感触很深。之前，这本书我阅读过第一版，那时好像叫《.NET框架设计》，当时就特别钦佩JR大叔的技术功底和写作技巧，正向书中有人评论的那样，JR确实适合于把枯涩难懂的概念用简短的语言描述清楚。还有下个季度需要阅读的《WINDOWS核心编程》更是经典中的经典（幸会这本书我阅读过），经典也是毫无疑问的，我这里只是感慨一下，相信阅读过这两本书的人都有这种感慨了。这两本书我觉得是一个WINDOWS程序员应该买来阅读并且摆在案头收藏的。</span></p>
<p><span style="font-size: 10pt">　　在阅读这本书时我发现很多值得思考和有趣的地方，例如：JR关于调用的参数和返回值的建议；位索引器示例；触发事件的事件安全；字符串格式化和字符串的驻留等。尤其是.NET的垃圾回收机制在这本书中讲的很详细。其中有两个知识点是让我感到收获很大的地方而且例子也很详细，我在这里就单独拿出来与大家分享，同时也作为知识点进行总结，这里讲没什么技术含量，大家别BS我。</span></p>
<p><span style="font-size: 10pt"></span><span style="font-size: 10pt">　　</span><span style="font-size: 12pt"><strong>第一部分：常量，只读字段，静态字段，静态只读字段区别与比较</strong></span></p>
<p><span style="font-size: 10pt">　　<em><strong>常量</strong></em>：常量就是指永远不会改变的符号，在.Net通过编译以后常量的值会插入到程序集的元数据中，所以常量的类型必须是.Net的基元类型Boolean，Char，Byte，SByte，Int16，Int32，UInt32，Int64，UInt64，Singe，Double，Decimal和String。也就是说在一个程序集A的类中定义一个常量，在另一个程序集B中使用这个常量，当两个程序集编译以后，C#编译器会将这个常量插入到使用这个常量的程序集B的元数据中，而这时使用常量的程序集A对定义常量的程序集B没有运行时的依赖关系了，也就是说在运行时可以删除定义常量的程序集A，同时也说明如果修改这个常量的值再去编译定义常量的程序集A不会改变使用常量的程序集B在运行时获取到的这个常量的值，常量在带来这种好处的同时显然对于程序集的版本控制是很不利的。如果一个程序集需要从另一个程序集中总是获得最新的数据，则不能使用常量，这时可以使用只读字段。此外，常量具有static的含义，只能通过类型访问，不能通过对象访问。</span></p>
<p><span style="font-size: 10pt">　　<em><strong>只读字段</strong></em>：只读字段也是在初始化（这个初始化是在运行时初初始化的）以后在验证过程中不允许修改的字段，只读字段引用的可以是任何类型的对象。但要注意只读字段只有在对象初始化时可以给这个字段赋值，也就是字段在初始化时还具有可写属性，以后这个字段就只读了，字段的只读含义是这个变量的引用不可以改变了，但是具体引用的对象的状态时可以改变的。编译器和验证机制确保只读字段不会被任何其他方法写入，但是我们依然可以使用反射修改只读字段。只读字段属于对象实例的，需要通过对象访问，属于对象状态的一部分。</span></p>
<p><span style="font-size: 10pt">　　<em><strong>静态字段</strong></em>：静态字段是与类型关联的成员（只能通过类型访问，不像Java还可以通过类的实例访问，如果没记错的话），静态字段的初始化是在类型被加载到CLR中时执行的。静态字段可以应用任何类型的对象。</span></p>
<p><span style="font-size: 10pt">　　<em><strong>静态只读字段</strong></em>：静态只读字段与常量比较类似，但是静态只读字段不限于基元类型，可以是.Net中的任何类型，静态只读字段不像常量是在编译时插入到元数据中的，而静态只读字段是在运行时赋值和确定的，也就是对于程序的依赖是一种强依赖关系，具体的值是在运行时去程序集中取到的，而不像常量做一个拷贝插入元数据中。静态只读字段属于类型的，通过类型访问。</span></p>
<p><span style="font-size: 10pt">　　通过反射修改私有字段，下面一个示例通过反射修改私有的一般字段，常量，只读字段，静态字段，静态只读字段并打印出结果。在这里可以可以看出反射是很强大的，既然可以修改私有的只读字段，但要注意实际上通过反射也无法修改常量，修改会报错，这与常量的存储方式有关。通过反射给人一种可以跳过验证规则的假象。示例代码：</span><span style="font-size: 10pt"></p>
<div class="cnblogs_code" onclick="cnblogs_code_show('92ada516-8d38-4198-b4a4-95d5a1d83f40')"><img style="display: none" id="code_img_closed_92ada516-8d38-4198-b4a4-95d5a1d83f40" class="code_img_closed" alt="" src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" /><img id="code_img_opened_92ada516-8d38-4198-b4a4-95d5a1d83f40" class="code_img_opened" onclick="cnblogs_code_hide('92ada516-8d38-4198-b4a4-95d5a1d83f40',event)" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif"><span class="cnblogs_code_collapse">通过反射修改私有字段</span> 
<div id="cnblogs_code_open_92ada516-8d38-4198-b4a4-95d5a1d83f40">
<div><!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System;<br /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Collections.Generic;<br /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Linq;<br /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Text;<br /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Reflection;<br /><br /></span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;FalseVerification<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Program<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Main(</span><span style="color: #0000ff">string</span><span style="color: #000000">[]&nbsp;args)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Type&nbsp;type&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">typeof</span><span style="color: #000000">(SomeType);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SomeType&nbsp;st&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;SomeType();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;st.Print();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;正常字段，当然可以修改</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FieldInfo&nbsp;fi&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;type.GetField(</span><span style="color: #800000">"</span><span style="color: #800000">f1</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;BindingFlags.NonPublic&nbsp;</span><span style="color: #000000">|</span><span style="color: #000000">&nbsp;BindingFlags.Instance);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi.SetValue(st,&nbsp;(Int32)fi.GetValue(st)&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">1</span><span style="color: #000000">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;常量字段，反射也无法修改，如果取消下面语句的注释，执行会出错</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">/*</span><span style="color: #008000">&nbsp;原因说明：常量的值必须在编译时就确定（只能是基元类型），也就是说在定义时就赋值。<br />&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;而其它字段是存储在动态内存中，在运行时是可修改的。</span><span style="color: #008000">*/</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;type.GetField(</span><span style="color: #800000">"</span><span style="color: #800000">f2</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;BindingFlags.NonPublic&nbsp;</span><span style="color: #000000">|</span><span style="color: #000000">&nbsp;BindingFlags.Static&nbsp;</span><span style="color: #000000">|</span><span style="color: #000000">&nbsp;BindingFlags.Instance);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">fi.SetValue(null,&nbsp;(Int32)fi.GetValue(null)&nbsp;+&nbsp;1);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;只读字段，可通过反射方式修改值</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;type.GetField(</span><span style="color: #800000">"</span><span style="color: #800000">f3</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;BindingFlags.NonPublic&nbsp;</span><span style="color: #000000">|</span><span style="color: #000000">&nbsp;BindingFlags.Instance);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi.SetValue(st,&nbsp;(Int32)fi.GetValue(st)&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">1</span><span style="color: #000000">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;静态字段，也可修改</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;type.GetField(</span><span style="color: #800000">"</span><span style="color: #800000">f4</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;BindingFlags.NonPublic&nbsp;</span><span style="color: #000000">|</span><span style="color: #000000">&nbsp;BindingFlags.Static);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi.SetValue(</span><span style="color: #0000ff">null</span><span style="color: #000000">,&nbsp;(Int32)fi.GetValue(</span><span style="color: #0000ff">null</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">1</span><span style="color: #000000">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;静态只读字段，下面代码不出错，改变了反射字段的值，但类中的字段值并没有被改变</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;type.GetField(</span><span style="color: #800000">"</span><span style="color: #800000">f5</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;BindingFlags.NonPublic&nbsp;</span><span style="color: #000000">|</span><span style="color: #000000">&nbsp;BindingFlags.Static);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi.SetValue(</span><span style="color: #0000ff">null</span><span style="color: #000000">,&nbsp;(Int32)fi.GetValue(</span><span style="color: #0000ff">null</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">1</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Int32&nbsp;f5&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(Int32)fi.GetValue(</span><span style="color: #0000ff">null</span><span style="color: #000000">);&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;i5&nbsp;得到值为51</span><span style="color: #008000"><br /></span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;st.Print();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #800000">"</span><span style="color: #800000">f5:&nbsp;</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;f5.ToString());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.ReadKey();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;SomeType<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Int32&nbsp;f1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">30</span><span style="color: #000000">;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;私有字段</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;Int32&nbsp;f2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">10</span><span style="color: #000000">;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;私有常量字段</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">readonly</span><span style="color: #000000">&nbsp;Int32&nbsp;f3&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">20</span><span style="color: #000000">;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;私有只读字段</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;Int32&nbsp;f4&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">40</span><span style="color: #000000">;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;私有静态字段</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">readonly</span><span style="color: #000000">&nbsp;Int32&nbsp;f5&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">50</span><span style="color: #000000">;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;私有静态只读字段</span><span style="color: #008000"><br /></span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Print()<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><span style="color: #800000">"</span><span style="color: #800000">f1:&nbsp;</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;f1.ToString());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #800000">"</span><span style="color: #800000">f2:&nbsp;</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;f2.ToString());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #800000">"</span><span style="color: #800000">f3:&nbsp;</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;f3.ToString());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #800000">"</span><span style="color: #800000">f4:&nbsp;</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;SomeType.f4.ToString());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #800000">"</span><span style="color: #800000">f5:&nbsp;</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;SomeType.f5.ToString());<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /></span></div></div></div>
<p>&nbsp;运行结果：</p>
<p><img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/thriving-country/FalseVerification.jpg" width="681" height="267" /></p>
<p></span><span style="font-size: 10pt">　　从这个结果可以看出，通过反射可以修改私有的普通字段，可以修改只读字段，可以修改静态字段，修改这三个都没有问题，但是不可以修改常量字段。当通过反射修改静态只读字段时（有点类似常量）时，可以正常执行，但是通过类获取的静态只读字段并没有改变，说明实际并没有修改成功，我们实际修改的只是通过反射获取的静态只读字段，并没有实际映射回去。具体原因感兴趣的同学可以通过IL分析一下，鄙人不才，不会IL。</span></p>
<p><span style="font-size: 10pt">　　</span><span style="font-size: 12pt"><strong>第二部分：GC中的GCBeep示例</strong></span></p>
<p><span style="font-size: 10pt">　　先看看代码：</span><span style="font-size: 10pt"></p>
<div class="cnblogs_code" onclick="cnblogs_code_show('9a919604-8df1-4b90-861d-e2dc5c365855')"><img style="display: none" id="code_img_closed_9a919604-8df1-4b90-861d-e2dc5c365855" class="code_img_closed" alt="" src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" /><img id="code_img_opened_9a919604-8df1-4b90-861d-e2dc5c365855" class="code_img_opened" onclick="cnblogs_code_hide('9a919604-8df1-4b90-861d-e2dc5c365855',event)" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif"><span class="cnblogs_code_collapse">GCBeep</span> 
<div id="cnblogs_code_open_9a919604-8df1-4b90-861d-e2dc5c365855">
<div><!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System;<br /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Collections.Generic;<br /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Linq;<br /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Text;<br /><br /></span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;GCBeep<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Program<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Main(</span><span style="color: #0000ff">string</span><span style="color: #000000">[]&nbsp;args)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;GCBeep();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;创建很多对象，让GC执行垃圾收集</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(Int32&nbsp;x&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">;&nbsp;x&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">10000</span><span style="color: #000000">;&nbsp;x</span><span style="color: #000000">++</span><span style="color: #000000">)<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;Console.WriteLine(x);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Byte[]&nbsp;b&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Byte[</span><span style="color: #800080">100</span><span style="color: #000000">];<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;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">internal</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">sealed</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;GCBeep<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">/*</span><span style="color: #008000">&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这是一个Finalize方法，GC在发现根<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;中没有对于GCBeep对象的引用时会在<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;垃圾收集时调用这个方法<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">~</span><span style="color: #000000">GCBeep()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.Beep();</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;让控制台发出报警的声音</span><span style="color: #008000"><br /></span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">!</span><span style="color: #000000">AppDomain.CurrentDomain.IsFinalizingForUnload()&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">!</span><span style="color: #000000">Environment.HasShutdownStarted)<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;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;如果不是在应用程序域卸载或应用程序自行关闭时，新建一个GCBeep对象并没有变量引用它</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;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;GCBeep();<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;}<br />}<br /></span></div></div></div>
<p>　　GC在垃圾收集时会执行对象的Finalize方法来释放非托管的资源，在这里也就是~GCBeep()，在~GCBeep()方法内部首先让控制台发出报警声，之后会在不是应用程序域卸载和应用程序主动退出的情况下再创建一个GCBeep对象，并不让任何变量引用它，此时这个对象实际上已经成为下次GC执行垃圾收集的目标。在主函数中同样也是创建一个无变量引用的GCBeep对象作为程序的入口点，之后创建大量的对象，当托管堆的相关内存用完之后垃圾收集就会执行来回收垃圾释放内存以便容纳新创建的对象，这时垃圾收集调用~GCBeep()发出报警声。创建10000个Byte[] b = new Byte[100];在我的x86的win7笔记本上发出两次报警声，大家可以修改10000到更大测试，来根据报警声来判断执行~GCBeep()的次数。</p>
<p>　　这个例子我觉得设计的很精美，也很简洁，更重要的是可以说明垃圾收集时确实自动执行了对象的Finalize方法来释放非托管资源（作为示例这里并没有实际释放非托管资源）。</p>
<p></span>&nbsp;</p><img src="http://www.cnblogs.com/Thriving-Country/aggbug/1628314.html?type=1" width="1" height="1" alt=""/><p>评论: 8　<a href="http://www.cnblogs.com/Thriving-Country/archive/2009/12/20/1628314.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/Thriving-Country/archive/2009/12/20/1628314.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56819/" target="_blank">Yahoo脑震荡 关闭服务汇总贴</a><span style="color:gray">(2010-02-10 12:06)</span><br/>· <a href="http://news.cnblogs.com/n/56824/" target="_blank">2003年微软遭遇iTunes：我们彻底晕头转向了</a><span style="color:gray">(2010-02-10 12:06)</span><br/>· <a href="http://news.cnblogs.com/n/56823/" target="_blank">百度数据能被“作弊”软件篡改？百度:追究侵权</a><span style="color:gray">(2010-02-10 11:52)</span><br/>· <a href="http://news.cnblogs.com/n/56822/" target="_blank">Ksplice为Linux提供永远不用重启服务</a><span style="color:gray">(2010-02-10 11:51)</span><br/>· <a href="http://news.cnblogs.com/n/56821/" target="_blank">视频网站2010年格局之变：七成企业将被淘汰</a><span style="color:gray">(2010-02-10 11:48)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56812/" target="_blank">Google社会化产品Buzz发布会实录</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>【经验总结】服务器端编程部分概念理解</title><link>http://www.cnblogs.com/Thriving-Country/archive/2009/12/18/1627502.html</link><dc:creator>GUO Xingwang</dc:creator><author>GUO Xingwang</author><pubDate>Fri, 18 Dec 2009 15:03:00 GMT</pubDate><guid>http://www.cnblogs.com/Thriving-Country/archive/2009/12/18/1627502.html</guid><description><![CDATA[<p>阅读: 1572 评论: 3 作者: <a href="http://www.cnblogs.com/Thriving-Country/" target="_blank">GUO Xingwang</a> 发表于 2009-12-18 23:03 <a href="http://www.cnblogs.com/Thriving-Country/archive/2009/12/18/1627502.html" target="_blank">原文链接</a></p><p>　　<strong>这篇文章对于高手跳过，内容比较初级。</strong><span style="font-size: 10pt">有几个概念在服务器端编程时我会经常混淆，估计有些朋友也和我一样。它们是请求（对应响应），连接，线程。这篇短文主要是对这几个概念作了一定的解释，当你理清这些概念以后，就不会习惯性的认为一个请求必须由一个线程处理了，它们之间并没有这种必然的联系。</span></p>
<p><span style="font-size: 10pt">　　<strong>请求Request<br /></strong>　　我们经常提到的Request实际上是指客户端发过来的用于对某些资源的访问申请或将一些客户端的数据等发送给服务端的请求，一般一个请求会相应的有一个响应。服务器端收到请求以后会对这个请求作出处理，可能是直接处理掉或者暂时放到请求的队列中等待。大家都知道Web开发中的HttpRequest和HttpResponse，它们就分别代表一个遵循Http协议的请求和一个遵循Http协议的响应，通过请求可以拿到客户端要请求的资源（URl），这个请求的客户端环境，以及请求中携带的提交数据（例如POST方式为提交一些表单数据等），与这个请求对应的响应是Http服务器给客户端的应答，包括处理的结果和一些消息内容等。可以把它们简单理解成客户端提交给服务器的数据和服务器处理这些数据以后给客户端发送的数据，也可以理解为一问一答。</span></p>
<p><span style="font-size: 10pt">　　<strong>连接Connection<br /></strong>　　在服务器端编程时连接可能是最重要的概念了，但是很多组件已经把连接的管理封装在了底层框架中（例如协议栈的连接管理模块），所以有时连接对于用户来说是透明的，使用者甚至不知道连接的存在，但是当发现问题时你可能就需要了解连接是如何管理的了。现在我们谈连接的概念已经局限在了Socket连接之上了（实际上是一种规范），因为它实在太广泛了。建立Socket连接时可以绑定TCP或者UDP协议。无论TCP还是UDP都是在传输层控制数据的。一个连接可以理解成一个客户端和服务器的双向数据通道，数据可以在这个通道中传输，实际上这个通道本质上就是网络的节点设备上保存的各种数据结构。要想在节点设备中传输数据就要建立连接，传输完成以后如果不再使用要关闭连接，释放这些数据结构所占用的资源（主要是内存资源），对于客户机来讲，可以对同一服务器并行存在多条连接，在微软的WINDOWS系统中默认可以同时存在2/4连接，这也是长期以来的一个潜规则，当然这个数字也可以通过配置改变或者对于不同的WINDOWS版本会有不同的值。如果对两个节点的连接使用完成以后没有关闭，再去创建连接达到上限以后就会失败，所以一些协议栈的底层框架会有一个很重要的模块就是连接的管理。它一般处理是这样的:打开一个连接以后不断的使用这个连接发送数据，如果发现长时间没有数据传输，那么策略就是关闭这个连接，这个关闭连接的操作可以由客户端发起，也可以由服务器端发起，具体的关闭操作在协议栈上一般会使用客户端的request.close()和response.close()方法实现或者服务器端的request.close()和response.close()方法实现。由此我们就可以理解为什么在应用层的协议中都会有一个类似connection.keepalive=true的东西存在。在我们经常使用的即时聊天工具（例如Fetion）中客户端要想保持这种连接也要不断的发送Keep-Alive信令消息，如果服务器发现在一定的时间内没有收到这个信令消息，则就会主动关闭对这个客户端的连接以释放资源满足其它客户端的连接能力。</span></p>
<p><span style="font-size: 10pt">　　<strong>线程Thread</strong><br />　　这个概念在这里来讲确实有些不合适，因为它是几乎所有编程中都会用到的。在服务器端编程中，线程主要负责处理来自客户端的请求，这里主要想说明的是线程与请求没有直接的对应关系，也就是一个请求不一定由单独一个线程处理（例如ASP.NET中的异步httphandler），但总会有某个线程会处理它。此外线程的创建需要的开销比较大，系统需要分配线程内核对象和一个线程堆栈，为了减少每次创建线程的系统开销，windows线程池产生，代码的最终执行还要落到线程中，所以有关请求的处理也是由线程完成的，很多服务器为了提高吞吐量，会开启多个线程对请求进行处理。例如ASP.NET对于请求的处理就是这样的，一个客户端的请求到达服务器以后，ASP.NET会从.NET的线程池中提出一个空闲的线程处理这个请求，但是如果处理这个请求需要很长时间的话，这个线程就不会被释放回线程池，如果请求大量的并发而来，线程池中没有足够的线程处理这些请求，那么这些请求可能进行排队（缓存在请求队列中）等待空闲线程来处理。对于这些需要长时间处理的IO请求，我们可以使用ASP.NET的异步httphandler来处理，异步httphandler的优点就是可以异步处理请求，这样就可以将工作线程释放回线程池以便处理更多等待着的请求，这样设计毫无疑问可以提高服务器的吞吐量。异步htthandler在结束IO操作以后会执行回调函数来通知请求已经结束，这时ASP.NET可以将这个响应发给客户端了，这个连接也可以在合适的时候关闭了（这里要注意一点就是在回调执行前，在Response返回给客户端前这个连接一直是保持的）。由此可以看出这种异步htthandler只是在服务器端的异步处理，对于客户端是透明的，客户端并不知道服务器端是怎么处理的。如果要想在客户端达到异步的请求提交和响应的获取可以使用AJAX的核心对象XMLHttpRequest实现。同样这个XMLHttpRequest也是受限于默认的2/4并发连接的限制。</span></p>
<p><span style="font-size: 10pt">　　<strong>总结</strong></span></p>
<p><span style="font-size: 10pt">　　这篇短文全都是文字，一点都不美观，大家凑合看吧。其实理解了这几个概念对排查一些问题还是有帮助的，这里主要想说明的就是三者之间没有什么必然的对应关系。其实有时候不知不觉我们就会把他们扯上一些没有必要的关系，这样会限制我们的思维。</span></p> <img src="http://www.cnblogs.com/Thriving-Country/aggbug/1627502.html?type=1" width="1" height="1" alt=""/><p>评论: 3　<a href="http://www.cnblogs.com/Thriving-Country/archive/2009/12/18/1627502.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/Thriving-Country/archive/2009/12/18/1627502.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56819/" target="_blank">Yahoo脑震荡 关闭服务汇总贴</a><span style="color:gray">(2010-02-10 12:06)</span><br/>· <a href="http://news.cnblogs.com/n/56824/" target="_blank">2003年微软遭遇iTunes：我们彻底晕头转向了</a><span style="color:gray">(2010-02-10 12:06)</span><br/>· <a href="http://news.cnblogs.com/n/56823/" target="_blank">百度数据能被“作弊”软件篡改？百度:追究侵权</a><span style="color:gray">(2010-02-10 11:52)</span><br/>· <a href="http://news.cnblogs.com/n/56822/" target="_blank">Ksplice为Linux提供永远不用重启服务</a><span style="color:gray">(2010-02-10 11:51)</span><br/>· <a href="http://news.cnblogs.com/n/56821/" target="_blank">视频网站2010年格局之变：七成企业将被淘汰</a><span style="color:gray">(2010-02-10 11:48)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56812/" target="_blank">Google社会化产品Buzz发布会实录</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>【经验总结】.Net的并发连接数限制问题</title><link>http://www.cnblogs.com/Thriving-Country/archive/2009/12/18/1627008.html</link><dc:creator>GUO Xingwang</dc:creator><author>GUO Xingwang</author><pubDate>Fri, 18 Dec 2009 14:03:00 GMT</pubDate><guid>http://www.cnblogs.com/Thriving-Country/archive/2009/12/18/1627008.html</guid><description><![CDATA[<p>阅读: 2538 评论: 13 作者: <a href="http://www.cnblogs.com/Thriving-Country/" target="_blank">GUO Xingwang</a> 发表于 2009-12-18 22:03 <a href="http://www.cnblogs.com/Thriving-Country/archive/2009/12/18/1627008.html" target="_blank">原文链接</a></p><p>　　<span style="font-size: 10pt">最近在项目中遇到了很棘手的问题，查到最后发现是由于HttpWebRequest对于同一个domain的请求建立的连接数同时不能超过两个的限制造成的。我用这篇短文把对这个问题的处理记录下来，同时也做为个人的经验积累吧，希望对大家有所帮助。</span></p>
<p>　　<span style="font-size: 10pt">这里所说的连接并发数限制是指对于同一个domain发起的最大连接数。其实在大多数微软的产品或组件中都存在这个限制，一般这个数值是2/4个，也就是说在默认情况下，对于同一个domain同时最多有两个连接处于建立状态。例如：熟悉javascript编程的人可能很清楚这个限制，在使用ajax时创建XmlHttpRequest对于同一个domain就有这个限制，实际上这个限制是继承与微软的IE浏览器的默认限制，也就是说IE浏览器本身对于同一个domain发起的连接数同时最多存在两条链路，由于Http协议是一个无状态的协议，连接也在Response返回来以后断掉（除非指定了keep-alive可以保持连接，这样可以保持一段时间），当然对于像IE这种多模式的客户端来说，这两条连接同时建立的时候几乎很少，甚至不可能，当然在comet技术应用时是很模拟。所以对于这种模式下的客户端来说这个连接限制没有那么明显，甚至很多人都不知道这个限制的存在。当然微软做这个限制是道理的，我想最大的好处可能就是防止一个客户端发起太多的并行连接来攻击服务器了（我的拆测）。但是这个连接限制在同时也阻碍了单模式下的服务器编程，当然我们可以修改这个默认值，但是毕竟还是比较麻烦。而且这个修改对于一个应用程序来说来说是全局的（我采取的方式，因为对HttpWebRequest对象的修改并不适合我的项目），当然这个修改也可以针对具体的HttpWebRequest对象进行设置。具体如何修改可以参照一下这篇文章</span><a href="http://www.qqdao.org/Lists/Posts/Post.aspx?List=751e96b2%2D405a%2D41cf%2Dadce%2Dc6a5b9a8c157&amp;ID=22&amp;RootFolder=%2A" target="_blank"><font color="#0000ff"><span style="font-size: 10pt">http://www.qqdao.org/Lists/Posts/Post.aspx?List=751e96b2%2D405a%2D41cf%2Dadce%2Dc6a5b9a8c157&amp;ID=22&amp;RootFolder=%2A</span></font></a></p>
<p>　　<span style="font-size: 10pt">我的问题是出现在刚刚上线的项目中，我的这个项目是一个服务器端程序，内部使用了HttpWebRequest去请求一个网站的url。在这个项目中请求的次数非常频繁。</span></p>
<p>　　<span style="font-size: 10pt"><strong>问题表现：</strong>刚上线的服务就要承担很大的压力，据统计大概每秒钟有至少2000多个请求需要处理，有四台服务器做负载实现。但是发现在功能环境下运行很好的程序到了生产环境很多调用都失败了，成功的占了比例不大。失败的请求大都报如下错误&#8220;System.Net.WebException: The request was aborted: The request was canceled.&#8221;。但是查看网站的压力并不大，可以说是很轻，在用netstat -abn | find "xxxx"命令查看到网站的连接，发现只有两个已经建立的连接，当然这两个连接是并行的，并且是keep-alive的连接。从问题可以看出，大多数请求实际上是发送失败了，之后被取消了。但是这个发送失败并不是网站一侧没有资源来应答，而是请求在客户端就没有发出去数据包，可以说请求本身就没有发送出去。这个问题导致网站对于请求的吞吐能力再强也没有用，客户端请求发送失败。给人的感觉就像请求积压很厉害并且最后放弃了。</span></p>
<p>　　<span style="font-size: 10pt"><strong>问题排查：</strong>这个问题对于没有经验的人来说却实无从下手，方法就是尽量排除一些可能的原因，剩下最后的几个原因时进行验证。首先我猜测可能是线程池中的线程用尽了，但是后来抓了dump进行分析发现并不是这个原因。在经过一个晚上沉重的思考以后，第二天早上似乎有了一点灵感，已经很确定是由于连接数的限制了。我这样说是因为我考虑到网站端如果长时间没有返回，那么这个连接就一直在占用，当两个连接都在被占用时，再发送请求是就会由于没有及时得到可用的连接而失败（虽然实际情况可能比这要复杂的多，例如缓存请求，进行重试等，但是请求很频繁是，发送的能力是有限的，总会有一些请求没有及时发送出去而抛出异常，这个问题就好比通过一个漏斗向一个容器中注入水一样，如果流入的速度大于流出的速度会使漏斗慢慢达到盛满水，这样再继续时肯定就会流到外面了，也就是这里出现了异常，也就是多出来的会放舍弃掉。</span></p>
<p><span style="font-size: 10pt">　　<strong>问题解决：</strong>既然知道了原因，那么解决起来自然也就比较容易了，修改.Net的这个默认并发连接数可以通过很多种方式，可以通过在程序初始化时执行以下代码完成ServicePointManager.DefaultConnectionLimit = 500;，也可以通过修改配置文件来达到同样的效果，由于程序已经上线，所以我是通过修改配置完成的。这个东西自然在线下也做了很多测试，发现确实是这里的问题，于是晚上做了一个更新，第二天早上发现基本所有调用都成功了，不成功的也是网站没有返回结果超时导致的，真是庆幸。同时发现以前经常报的错也不见了，正如我所料。当然我这限制设置为500而没有设置到1000主要是我想客户端的端口开的不会太多。</span></p>
<p><span style="font-size: 10pt">　　<strong>总结：</strong>这个配置我觉得是一个限制，不能设置的太大也不能太小。其实搞计算机的需要很多经验的同时，灵感也很重要，这个问题就是我在当天晚上没有办法的情况下入睡以后，第二天醒来以后突然觉察到的，之后到了公司就开始测试和验证，没想到还真解决了问题，但是有一点还是特别提醒，无论是用什么协议栈发送调用或消息，最好都不要使用for语句压消息，这会太调用量大时会出现问题。</span></p>
<p>　　</p> <img src="http://www.cnblogs.com/Thriving-Country/aggbug/1627008.html?type=1" width="1" height="1" alt=""/><p>评论: 13　<a href="http://www.cnblogs.com/Thriving-Country/archive/2009/12/18/1627008.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/Thriving-Country/archive/2009/12/18/1627008.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56819/" target="_blank">Yahoo脑震荡 关闭服务汇总贴</a><span style="color:gray">(2010-02-10 12:06)</span><br/>· <a href="http://news.cnblogs.com/n/56824/" target="_blank">2003年微软遭遇iTunes：我们彻底晕头转向了</a><span style="color:gray">(2010-02-10 12:06)</span><br/>· <a href="http://news.cnblogs.com/n/56823/" target="_blank">百度数据能被“作弊”软件篡改？百度:追究侵权</a><span style="color:gray">(2010-02-10 11:52)</span><br/>· <a href="http://news.cnblogs.com/n/56822/" target="_blank">Ksplice为Linux提供永远不用重启服务</a><span style="color:gray">(2010-02-10 11:51)</span><br/>· <a href="http://news.cnblogs.com/n/56821/" target="_blank">视频网站2010年格局之变：七成企业将被淘汰</a><span style="color:gray">(2010-02-10 11:48)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56812/" target="_blank">Google社会化产品Buzz发布会实录</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>大家一起学面向对象设计模式系列Chapter 04 建造者(Builder)</title><link>http://www.cnblogs.com/Thriving-Country/archive/2009/03/18/1408036.html</link><dc:creator>GUO Xingwang</dc:creator><author>GUO Xingwang</author><pubDate>Wed, 18 Mar 2009 06:44:00 GMT</pubDate><guid>http://www.cnblogs.com/Thriving-Country/archive/2009/03/18/1408036.html</guid><description><![CDATA[<p>阅读: 1305 评论: 1 作者: <a href="http://www.cnblogs.com/Thriving-Country/" target="_blank">GUO Xingwang</a> 发表于 2009-03-18 14:44 <a href="http://www.cnblogs.com/Thriving-Country/archive/2009/03/18/1408036.html" target="_blank">原文链接</a></p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size: 10pt">这一篇我将向大家讲解建造者（Builder）模式。在上一篇文章中我们主要学习了抽象工厂（Abstract Factory）模式，抽象工厂模式主要解决对不同等级结构的产品的创建工作，主要关注的是创建哪一批产品的问题，而本文所讲的建造者模式主要是解决对于一个产品如何分部创建的问题，这是对于建造者模式的最初描述。同样，这篇文章主要分为两大部分来讲解，第一部分我会对建造者模式的原型进行详细的说明，第二部分会对建造者模式如何解决具体问题进行探讨。</span></p>
<p><span style="font-size: 12pt"><strong><span style="color: #000080"><span style="color: #000080">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;建造者模式的原型</span></span></strong></span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>描述：</strong></span></p>
<p><span style="font-size: 10pt"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在软件系统中，有时候面临一个"复杂对象"的创建工作，其通常由各个部分的子对象用一定算法构成；由于需求的变化，这个复杂对象的各个部分经常面临着剧烈的变化，但是将它们组合到一起的算法却相对稳定。</font></span></p>
<p><span style="font-size: 10pt"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;建造者模式是对对象的创建模式。建造者模式可以将一个产品的内部表象与产品的生成过程分隔开来，从而可以使一个建造过程生成具有不同的内部表象的产品对象。<font size="2">建造者模式利用一个导演者对象和具体建造者对象一个一个地建造出所有的零件，从而建造出完整的产品对象。建造者模式将产品的结构和产品的零件建造过程对客户端隐藏起来，把对建造过程进行指挥的责任和具体建造零件的责任分隔开来，达到责任划分和封装的目的。</font></font></span></p>
<p><span style="font-size: 10pt"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 意图：</strong></span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;将一个复杂对象的构建与其表示相分离，使得同样的构建过程可以创建不同的表示。</span></p>
<p><span style="font-size: 10pt"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 模式原型UML：</strong></span></p>
<p><span style="font-size: 10pt"><strong></strong></span>&nbsp;</p>
<span style="font-size: 10pt">
<p align="center"><img height="179" alt="" src="http://www.cnblogs.com/images/cnblogs_com/thriving-country/designpattern20090316/builder.gif" width="424" border="0" /></p>
<p align="left"><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;建造者模式涉及到以下角色：</font></p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1、抽象建造者（Builder）角色：给出一个抽象接口，以规范产品对象的各个组成成分的建造。此接口中一般至少规定两个方法，一个是创建部分的方法，例如BuilderPart，另一个是返回结果的方法，例如GetProduct，以约束具体建造者实现。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2、具体建造者（ConcreteBuilder）角色：担任这个角色的是与应用程序紧密相关的一些类，它们在应用程序的调用下创建产品的实例。这个角色产品实现了抽象建造者接口，主要完成分部创建产品并提供产品对象的实例。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3、导演者（Director）角色：顾名思义，就是具体指挥使用哪个具体创造者来完成产品的创建，是创建工作的调用者。但是，导演者角色并没有产品类的具体知识，真正拥有产品类的具体知识的是具体建造者角色。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4、产品（Product）角色：产品角色就是建造中的复杂对象。一般只有对于复杂对象的创建才使用建造者模式，一个系统中会出现多于一个的产品类，而这些产品类并不一定有共同的接口，可能完全不关联，这时就需要提供多套抽象和具体的建造者来完成不一致的产品的创建或者是采用一个统一接口来标识产品，我个人推荐前者。请大家注意，这里的产品只是一个产品类，不存在继承关系，所以也就没有像抽象工厂中的那种客户端依赖抽象的说法了。</p>
<p align="left"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;模式原型代码：</strong></p>
<div class="cnblogs_code"><img id="Code_Closed_Image_104048" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_104048').style.display='none'; document.getElementById('Code_Open_Image_104048').style.display='inline'; document.getElementById('Code_Open_Text_104048').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top"><img id="Code_Open_Image_104048" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_104048').style.display='none'; getElementById('Code_Closed_Image_104048').style.display='inline'; getElementById('Code_Closed_Text_104048').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span class="cnblogs_code_Collapse" id="Code_Closed_Text_104048">Builder pattern code in C#</span><span id="Code_Open_Text_104048" style="display: none"><br />
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #008000">//</span><span style="color: #008000">&nbsp;建造者模式</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Collections;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;DesignPatterns.Creational<br />
<img id="Codehighlighter1_87_2238_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_87_2238_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_87_2238_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_87_2238_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_87_2238_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_87_2238_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_87_2238_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_87_2238_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span id="Codehighlighter1_87_2238_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_87_2238_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;应用程序测试</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;MainApp<br />
<img id="Codehighlighter1_134_664_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_134_664_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_134_664_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_134_664_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_134_664_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_134_664_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_134_664_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_134_664_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_134_664_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_134_664_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Main()<br />
<img id="Codehighlighter1_178_658_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_178_658_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_178_658_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_178_658_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_178_658_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_178_658_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_178_658_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_178_658_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_178_658_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_178_658_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;创建导演者和具体建造者角色</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Director&nbsp;director&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Director();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Builder&nbsp;b1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ConcreteBuilder1();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Builder&nbsp;b2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ConcreteBuilder2();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;根据两个建造者获得产品类，注意应用程序直接使用产品类</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;director.Construct(b1);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Product&nbsp;p1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;b1.GetResult();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p1.Show();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;director.Construct(b2);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Product&nbsp;p2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;b2.GetResult();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p2.Show();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;等待输入</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.Read();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;导演者角色</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Director<br />
<img id="Codehighlighter1_703_885_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_703_885_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_703_885_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_703_885_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_703_885_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_703_885_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_703_885_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_703_885_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_703_885_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_703_885_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;导演者调用建造者分部创建，注意具体的创建顺序由导演者决定</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Construct(Builder&nbsp;builder)<br />
<img id="Codehighlighter1_800_879_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_800_879_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_800_879_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_800_879_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_800_879_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_800_879_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_800_879_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_800_879_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_800_879_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_800_879_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;builder.BuildPartA();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;builder.BuildPartB();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;抽象建造者</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Builder<br />
<img id="Codehighlighter1_932_1070_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_932_1070_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_932_1070_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_932_1070_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_932_1070_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_932_1070_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_932_1070_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_932_1070_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_932_1070_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_932_1070_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;BuildPartA();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;BuildPartB();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;Product&nbsp;GetResult();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;具体建造者1</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;ConcreteBuilder1&nbsp;:&nbsp;Builder<br />
<img id="Codehighlighter1_1128_1471_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1128_1471_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1128_1471_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1128_1471_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1128_1471_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1128_1471_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1128_1471_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1128_1471_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1128_1471_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1128_1471_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Product&nbsp;product&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Product();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;BuildPartA()<br />
<img id="Codehighlighter1_1230_1275_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1230_1275_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1230_1275_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1230_1275_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1230_1275_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1230_1275_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1230_1275_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1230_1275_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1230_1275_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1230_1275_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;product.Add(</span><span style="color: #800000">"</span><span style="color: #800000">PartA</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;BuildPartB()<br />
<img id="Codehighlighter1_1327_1372_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1327_1372_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1327_1372_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1327_1372_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1327_1372_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1327_1372_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1327_1372_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1327_1372_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1327_1372_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1327_1372_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;product.Add(</span><span style="color: #800000">"</span><span style="color: #800000">PartB</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;Product&nbsp;GetResult()<br />
<img id="Codehighlighter1_1426_1465_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1426_1465_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1426_1465_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1426_1465_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1426_1465_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1426_1465_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1426_1465_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1426_1465_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1426_1465_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1426_1465_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;product;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;具体建造者2</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;ConcreteBuilder2&nbsp;:&nbsp;Builder<br />
<img id="Codehighlighter1_1529_1872_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1529_1872_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1529_1872_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1529_1872_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1529_1872_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1529_1872_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1529_1872_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1529_1872_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1529_1872_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1529_1872_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Product&nbsp;product&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Product();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;BuildPartA()<br />
<img id="Codehighlighter1_1631_1676_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1631_1676_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1631_1676_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1631_1676_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1631_1676_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1631_1676_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1631_1676_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1631_1676_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1631_1676_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1631_1676_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;product.Add(</span><span style="color: #800000">"</span><span style="color: #800000">PartX</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;BuildPartB()<br />
<img id="Codehighlighter1_1728_1773_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1728_1773_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1728_1773_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1728_1773_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1728_1773_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1728_1773_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1728_1773_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1728_1773_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1728_1773_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1728_1773_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;product.Add(</span><span style="color: #800000">"</span><span style="color: #800000">PartY</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;Product&nbsp;GetResult()<br />
<img id="Codehighlighter1_1827_1866_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1827_1866_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1827_1866_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1827_1866_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1827_1866_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1827_1866_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1827_1866_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1827_1866_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1827_1866_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1827_1866_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;product;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;产品类</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Product<br />
<img id="Codehighlighter1_1908_2236_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1908_2236_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1908_2236_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1908_2236_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1908_2236_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1908_2236_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1908_2236_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1908_2236_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1908_2236_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1908_2236_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ArrayList&nbsp;parts&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ArrayList();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Add(</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;part)<br />
<img id="Codehighlighter1_1999_2039_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1999_2039_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1999_2039_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1999_2039_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1999_2039_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1999_2039_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1999_2039_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1999_2039_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1999_2039_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1999_2039_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parts.Add(part);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Show()<br />
<img id="Codehighlighter1_2076_2230_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2076_2230_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_2076_2230_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_2076_2230_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_2076_2230_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2076_2230_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_2076_2230_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_2076_2230_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_2076_2230_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_2076_2230_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #800000">"</span><span style="color: #800000">\nProduct&nbsp;Parts&nbsp;-------</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">foreach</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;part&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;parts)<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(part);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span></span></div>
<p></span><span style="font-size: 10pt">输出结果为：</span></p>
<p><span style="font-size: 10pt"><span style="color: #ff0000"><span style="color: #ff0000">Product Parts -------<br />
PartA<br />
PartB<br />
<br />
Product Parts -------<br />
PartX<br />
PartY</span></span></span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>生活中的实例：</strong></span></p>
<p style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这个小例子向大家展示了一辆车是如何利用建造者模式被创建的，注意商店（这里就是导演者）是如何利用VehicleBuilders按照一定的顺序创建一辆车的。</p>
<div class="cnblogs_code"><img id="Code_Closed_Image_112139" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_112139').style.display='none'; document.getElementById('Code_Open_Image_112139').style.display='inline'; document.getElementById('Code_Open_Text_112139').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top"><img id="Code_Open_Image_112139" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_112139').style.display='none'; getElementById('Code_Closed_Image_112139').style.display='inline'; getElementById('Code_Closed_Text_112139').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span class="cnblogs_code_Collapse" id="Code_Closed_Text_112139">Real world code using Abstract Factory in C#</span><span id="Code_Open_Text_112139" style="display: none"><br />
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #008000">//</span><span style="color: #008000">&nbsp;建造者模式应用小例子</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Collections.Generic;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;DesignPatterns.Creational.Builder.RealWorld<br />
<img id="Codehighlighter1_118_4315_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_118_4315_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_118_4315_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_118_4315_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_118_4315_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_118_4315_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_118_4315_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_118_4315_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span id="Codehighlighter1_118_4315_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_118_4315_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;主应用程序</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;MainApp<br />
<img id="Codehighlighter1_163_805_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_163_805_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_163_805_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_163_805_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_163_805_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_163_805_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_163_805_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_163_805_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_163_805_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_163_805_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Main()<br />
<img id="Codehighlighter1_208_799_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_208_799_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_208_799_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_208_799_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_208_799_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_208_799_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_208_799_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_208_799_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_208_799_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_208_799_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VehicleBuilder&nbsp;builder;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;利用具体Builder创建商店对象</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Shop&nbsp;shop&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Shop();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;踏板车建造者</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;builder&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ScooterBuilder();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shop.Construct(builder);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;builder.Vehicle.Show();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;小汽车建造者</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;builder&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;CarBuilder();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shop.Construct(builder);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;builder.Vehicle.Show();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;摩托车建造者</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;builder&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;MotorCycleBuilder();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shop.Construct(builder);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;builder.Vehicle.Show();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;等待用户输入</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.ReadKey();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;商店类，相当于导演者角色</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Shop<br />
<img id="Codehighlighter1_850_1133_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_850_1133_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_850_1133_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_850_1133_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_850_1133_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_850_1133_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_850_1133_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_850_1133_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_850_1133_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_850_1133_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;经过一个复杂的建造过程</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Construct(VehicleBuilder&nbsp;vehicleBuilder)<br />
<img id="Codehighlighter1_945_1127_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_945_1127_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_945_1127_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_945_1127_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_945_1127_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_945_1127_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_945_1127_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_945_1127_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_945_1127_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_945_1127_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vehicleBuilder.BuildFrame();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vehicleBuilder.BuildEngine();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vehicleBuilder.BuildWheels();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vehicleBuilder.BuildDoors();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;车辆建造者，相当于抽象建造者角色</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;VehicleBuilder<br />
<img id="Codehighlighter1_1197_1544_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1197_1544_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1197_1544_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1197_1544_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1197_1544_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1197_1544_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1197_1544_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1197_1544_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1197_1544_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1197_1544_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;Vehicle&nbsp;vehicle;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;获得车辆产品实例</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Vehicle&nbsp;Vehicle<br />
<img id="Codehighlighter1_1295_1342_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1295_1342_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1295_1342_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1295_1342_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1295_1342_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1295_1342_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1295_1342_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1295_1342_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1295_1342_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1295_1342_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_1313_1332_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1313_1332_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1313_1332_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1313_1332_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1313_1332_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1313_1332_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1313_1332_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1313_1332_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">get</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_1313_1332_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1313_1332_Open_Text"><span style="color: #000000">{&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;vehicle;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;分部建造方法</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;BuildFrame();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;BuildEngine();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;BuildWheels();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;BuildDoors();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;摩托车建造者，相当于一个具体建造者角色</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;MotorCycleBuilder&nbsp;:&nbsp;VehicleBuilder<br />
<img id="Codehighlighter1_1622_2159_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1622_2159_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1622_2159_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1622_2159_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1622_2159_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1622_2159_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1622_2159_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1622_2159_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1622_2159_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1622_2159_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;MotorCycleBuilder()<br />
<img id="Codehighlighter1_1668_1729_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1668_1729_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1668_1729_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1668_1729_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1668_1729_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1668_1729_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1668_1729_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1668_1729_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1668_1729_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1668_1729_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vehicle&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Vehicle(</span><span style="color: #800000">"</span><span style="color: #800000">MotorCycle</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;BuildFrame()<br />
<img id="Codehighlighter1_1781_1844_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1781_1844_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1781_1844_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1781_1844_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1781_1844_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1781_1844_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1781_1844_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1781_1844_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1781_1844_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1781_1844_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vehicle[</span><span style="color: #800000">"</span><span style="color: #800000">frame</span><span style="color: #800000">"</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">MotorCycle&nbsp;Frame</span><span style="color: #800000">"</span><span style="color: #000000">;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;BuildEngine()<br />
<img id="Codehighlighter1_1897_1951_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1897_1951_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1897_1951_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1897_1951_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1897_1951_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1897_1951_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1897_1951_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1897_1951_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1897_1951_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1897_1951_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vehicle[</span><span style="color: #800000">"</span><span style="color: #800000">engine</span><span style="color: #800000">"</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">500&nbsp;cc</span><span style="color: #800000">"</span><span style="color: #000000">;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;BuildWheels()<br />
<img id="Codehighlighter1_2004_2053_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2004_2053_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_2004_2053_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_2004_2053_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_2004_2053_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2004_2053_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_2004_2053_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_2004_2053_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_2004_2053_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_2004_2053_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vehicle[</span><span style="color: #800000">"</span><span style="color: #800000">wheels</span><span style="color: #800000">"</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">2</span><span style="color: #800000">"</span><span style="color: #000000">;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;BuildDoors()<br />
<img id="Codehighlighter1_2105_2153_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2105_2153_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_2105_2153_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_2105_2153_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_2105_2153_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2105_2153_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_2105_2153_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_2105_2153_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_2105_2153_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_2105_2153_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vehicle[</span><span style="color: #800000">"</span><span style="color: #800000">doors</span><span style="color: #800000">"</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">0</span><span style="color: #800000">"</span><span style="color: #000000">;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;小汽车建造者，相当于一个具体建造者角色</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;CarBuilder&nbsp;:&nbsp;VehicleBuilder<br />
<img id="Codehighlighter1_2230_2747_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2230_2747_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_2230_2747_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_2230_2747_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_2230_2747_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2230_2747_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_2230_2747_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_2230_2747_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_2230_2747_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_2230_2747_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;CarBuilder()<br />
<img id="Codehighlighter1_2269_2323_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2269_2323_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_2269_2323_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_2269_2323_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_2269_2323_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2269_2323_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_2269_2323_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_2269_2323_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_2269_2323_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_2269_2323_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vehicle&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Vehicle(</span><span style="color: #800000">"</span><span style="color: #800000">Car</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;BuildFrame()<br />
<img id="Codehighlighter1_2375_2431_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2375_2431_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_2375_2431_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_2375_2431_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_2375_2431_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2375_2431_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_2375_2431_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_2375_2431_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_2375_2431_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_2375_2431_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vehicle[</span><span style="color: #800000">"</span><span style="color: #800000">frame</span><span style="color: #800000">"</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">Car&nbsp;Frame</span><span style="color: #800000">"</span><span style="color: #000000">;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;BuildEngine()<br />
<img id="Codehighlighter1_2484_2539_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2484_2539_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_2484_2539_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_2484_2539_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_2484_2539_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2484_2539_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_2484_2539_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_2484_2539_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_2484_2539_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_2484_2539_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vehicle[</span><span style="color: #800000">"</span><span style="color: #800000">engine</span><span style="color: #800000">"</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">2500&nbsp;cc</span><span style="color: #800000">"</span><span style="color: #000000">;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;BuildWheels()<br />
<img id="Codehighlighter1_2592_2641_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2592_2641_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_2592_2641_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_2592_2641_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_2592_2641_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2592_2641_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_2592_2641_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_2592_2641_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_2592_2641_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_2592_2641_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vehicle[</span><span style="color: #800000">"</span><span style="color: #800000">wheels</span><span style="color: #800000">"</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">4</span><span style="color: #800000">"</span><span style="color: #000000">;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;BuildDoors()<br />
<img id="Codehighlighter1_2693_2741_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2693_2741_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_2693_2741_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_2693_2741_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_2693_2741_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2693_2741_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_2693_2741_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_2693_2741_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_2693_2741_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_2693_2741_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vehicle[</span><span style="color: #800000">"</span><span style="color: #800000">doors</span><span style="color: #800000">"</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">4</span><span style="color: #800000">"</span><span style="color: #000000">;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;踏板车建造者，相当于一个具体建造者角色</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;ScooterBuilder&nbsp;:&nbsp;VehicleBuilder<br />
<img id="Codehighlighter1_2822_3349_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2822_3349_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_2822_3349_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_2822_3349_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_2822_3349_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2822_3349_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_2822_3349_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_2822_3349_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_2822_3349_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_2822_3349_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;ScooterBuilder()<br />
<img id="Codehighlighter1_2865_2923_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2865_2923_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_2865_2923_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_2865_2923_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_2865_2923_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2865_2923_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_2865_2923_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_2865_2923_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_2865_2923_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_2865_2923_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vehicle&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Vehicle(</span><span style="color: #800000">"</span><span style="color: #800000">Scooter</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;BuildFrame()<br />
<img id="Codehighlighter1_2975_3035_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2975_3035_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_2975_3035_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_2975_3035_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_2975_3035_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2975_3035_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_2975_3035_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_2975_3035_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_2975_3035_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_2975_3035_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vehicle[</span><span style="color: #800000">"</span><span style="color: #800000">frame</span><span style="color: #800000">"</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">Scooter&nbsp;Frame</span><span style="color: #800000">"</span><span style="color: #000000">;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;BuildEngine()<br />
<img id="Codehighlighter1_3088_3141_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_3088_3141_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_3088_3141_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_3088_3141_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_3088_3141_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_3088_3141_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_3088_3141_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_3088_3141_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_3088_3141_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_3088_3141_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vehicle[</span><span style="color: #800000">"</span><span style="color: #800000">engine</span><span style="color: #800000">"</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">50&nbsp;cc</span><span style="color: #800000">"</span><span style="color: #000000">;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;BuildWheels()<br />
<img id="Codehighlighter1_3194_3243_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_3194_3243_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_3194_3243_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_3194_3243_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_3194_3243_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_3194_3243_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_3194_3243_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_3194_3243_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_3194_3243_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_3194_3243_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vehicle[</span><span style="color: #800000">"</span><span style="color: #800000">wheels</span><span style="color: #800000">"</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">2</span><span style="color: #800000">"</span><span style="color: #000000">;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;BuildDoors()<br />
<img id="Codehighlighter1_3295_3343_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_3295_3343_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_3295_3343_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_3295_3343_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_3295_3343_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_3295_3343_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_3295_3343_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_3295_3343_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_3295_3343_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_3295_3343_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vehicle[</span><span style="color: #800000">"</span><span style="color: #800000">doors</span><span style="color: #800000">"</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">0</span><span style="color: #800000">"</span><span style="color: #000000">;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;车辆类，相当于产品类。注意这里的车辆类与摩托车、小汽车、踏板车等不是继承关系</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Vehicle<br />
<img id="Codehighlighter1_3419_4313_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_3419_4313_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_3419_4313_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_3419_4313_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_3419_4313_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_3419_4313_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_3419_4313_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_3419_4313_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_3419_4313_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_3419_4313_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;_vehicleType;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;使用一个字典来保存部分</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Dictionary</span><span style="color: #000000">&lt;</span><span style="color: #0000ff">string</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;_parts&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Dictionary</span><span style="color: #000000">&lt;</span><span style="color: #0000ff">string</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&gt;</span><span style="color: #000000">();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;构造器</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Vehicle(</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;vehicleType)<br />
<img id="Codehighlighter1_3646_3703_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_3646_3703_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_3646_3703_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_3646_3703_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_3646_3703_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_3646_3703_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_3646_3703_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_3646_3703_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_3646_3703_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_3646_3703_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">._vehicleType&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;vehicleType;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;索引器</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">[</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;key]<br />
<img id="Codehighlighter1_3767_3861_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_3767_3861_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_3767_3861_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_3767_3861_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_3767_3861_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_3767_3861_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_3767_3861_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_3767_3861_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_3767_3861_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_3767_3861_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img id="Codehighlighter1_3786_3809_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_3786_3809_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_3786_3809_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_3786_3809_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_3786_3809_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_3786_3809_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_3786_3809_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_3786_3809_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">get</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_3786_3809_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_3786_3809_Open_Text"><span style="color: #000000">{&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;_parts[key];&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img id="Codehighlighter1_3827_3851_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_3827_3851_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_3827_3851_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_3827_3851_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_3827_3851_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_3827_3851_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_3827_3851_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_3827_3851_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_3827_3851_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_3827_3851_Open_Text"><span style="color: #000000">{&nbsp;_parts[key]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;value;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Show()<br />
<img id="Codehighlighter1_3898_4307_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_3898_4307_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_3898_4307_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_3898_4307_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_3898_4307_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_3898_4307_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_3898_4307_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_3898_4307_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_3898_4307_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_3898_4307_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #800000">"</span><span style="color: #800000">\n---------------------------</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #800000">"</span><span style="color: #800000">Vehicle&nbsp;Type:&nbsp;{0}</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;_vehicleType);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #800000">"</span><span style="color: #800000">&nbsp;Frame&nbsp;:&nbsp;{0}</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;_parts[</span><span style="color: #800000">"</span><span style="color: #800000">frame</span><span style="color: #800000">"</span><span style="color: #000000">]);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #800000">"</span><span style="color: #800000">&nbsp;Engine&nbsp;:&nbsp;{0}</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;_parts[</span><span style="color: #800000">"</span><span style="color: #800000">engine</span><span style="color: #800000">"</span><span style="color: #000000">]);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #800000">"</span><span style="color: #800000">&nbsp;#Wheels:&nbsp;{0}</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;_parts[</span><span style="color: #800000">"</span><span style="color: #800000">wheels</span><span style="color: #800000">"</span><span style="color: #000000">]);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #800000">"</span><span style="color: #800000">&nbsp;#Doors&nbsp;:&nbsp;{0}</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;_parts[</span><span style="color: #800000">"</span><span style="color: #800000">doors</span><span style="color: #800000">"</span><span style="color: #000000">]);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></span></div>
<p><span style="font-size: 10pt">输出结果为：</span></p>
<p style="color: red"><span style="font-size: 10pt">---------------------------<br />
Vehicle Type: Scooter<br />
Frame &nbsp;: Scooter Frame<br />
Engine : none<br />
#Wheels: 2<br />
#Doors : 0<br />
<br />
---------------------------<br />
Vehicle Type: Car<br />
Frame &nbsp;: Car Frame<br />
Engine : 2500 cc<br />
#Wheels: 4<br />
#Doors : 4<br />
<br />
---------------------------<br />
Vehicle Type: MotorCycle<br />
Frame &nbsp;: MotorCycle Frame<br />
Engine : 500 cc<br />
#Wheels: 2<br />
#Doors : 0</span></p>
<p><span style="font-size: 10pt"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;什么情况下使用建造者：</strong></span></p>
<p><span style="font-size: 10pt">1、需要生成的产品对象有复杂的内部结构。每一个内部成分本身可以是对象，也可以仅仅是一个对象的组成部分。<br />
2、需要生成的产品对象的属性相互依赖。建造者模式可以强制实行一种分步骤进行的建造过程，因此，如果对象的一个属性必须在另一个属性被赋值之后才可以被赋值，使用建造者模式便是一个很好的设计思想。<br />
3、在对象创建过程中会使用到系统中的其他一些对象，这些对象在产品对象的创建过程中不易得到。</span></p>
<p><span style="font-size: 10pt"><strong style="font-size: 12pt"><span style="color: #000080"><span style="color: #000080">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;实际项目举例</span></span></strong></span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;现在我们需要在一个在PC游戏中构建房子的程序。可以构建的房子有多种样式，但是房屋的结构是相对稳定的，每个房子都有地基，墙面，房间，门，窗，地板等，同时也存在一定的构建顺序（必须先构建地基，这也就是产品类的组成部分之间的依赖关系），房子的具体风格可能包括很多种，例如居民住房，存放货物的仓储房等。由于房子的结构稳定，变化的只是房子的组成部分，这时我们可以考虑采用建造者模式来完成具体房屋的创建工作，即创建房屋和使用房屋责任的分离，房屋的构建与其表示相分离。同样的建造过程可以创建不同的表示（居民住房，存放货物的仓储房等）。</span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>本案例中的类与建造者模式中的角色的对应关系：</strong></span></p>
<p><span style="font-size: 10pt">BuildingBuilder（房屋建造者）——Builder（抽象建造者）</span></p>
<p><span style="font-size: 10pt">Architect（建造师）——Director（导演者）</span></p>
<p><span style="font-size: 10pt">HousingBuilder（住房建造者）——ConcreteBuilder1（具体建造者1）</span></p>
<p><span style="font-size: 10pt"><span style="font-size: 10pt">StorageBuilder（仓储房建造者）——ConcreteBuilder2（具体建造者2）</span></span></p>
<p><span style="font-size: 10pt"><span style="font-size: 10pt">Building（房子）——Product（产品）</span></span></p>
<p><span style="font-size: 10pt"><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>实现的代码如下：</strong></span></span><span style="font-size: 10pt"><span style="font-size: 10pt"></p>
<div class="cnblogs_code"><img id="Code_Closed_Image_143226" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_143226').style.display='none'; document.getElementById('Code_Open_Image_143226').style.display='inline'; document.getElementById('Code_Open_Text_143226').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top"><img id="Code_Open_Image_143226" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_143226').style.display='none'; getElementById('Code_Closed_Image_143226').style.display='inline'; getElementById('Code_Closed_Text_143226').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span class="cnblogs_code_Collapse" id="Code_Closed_Text_143226">Project code using Abstract Factory in C#</span><span id="Code_Open_Text_143226" style="display: none"><br />
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #008000">//</span><span style="color: #008000">&nbsp;建造者模式项目应用案例</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Collections.Generic;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;DesignPatterns.Creational.Builder.Project<br />
<img id="Codehighlighter1_117_4307_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_117_4307_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_117_4307_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_117_4307_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_117_4307_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_117_4307_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_117_4307_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_117_4307_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span id="Codehighlighter1_117_4307_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_117_4307_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;主应用程序</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;MainApp<br />
<img id="Codehighlighter1_162_702_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_162_702_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_162_702_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_162_702_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_162_702_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_162_702_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_162_702_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_162_702_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_162_702_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_162_702_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Main()<br />
<img id="Codehighlighter1_207_696_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_207_696_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_207_696_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_207_696_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_207_696_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_207_696_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_207_696_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_207_696_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_207_696_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_207_696_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BuildingBuilder&nbsp;builder;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;利用具体Builder创建建筑师对象</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Architect&nbsp;architect&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Architect();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;住房建造者</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;builder&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;HousingBuilder();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;architect.Construct(builder);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;builder.Building.DisplayMe();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;仓储建造者</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;builder&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;StorageBuilder();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;architect.Construct(builder);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;builder.Building.DisplayMe();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;等待用户输入</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.ReadKey();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;建筑师，相当于导演者角色</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Architect<br />
<img id="Codehighlighter1_752_1123_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_752_1123_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_752_1123_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_752_1123_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_752_1123_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_752_1123_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_752_1123_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_752_1123_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_752_1123_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_752_1123_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;经过一个复杂的建造过程</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Construct(BuildingBuilder&nbsp;buildingBuilder)<br />
<img id="Codehighlighter1_849_1117_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_849_1117_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_849_1117_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_849_1117_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_849_1117_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_849_1117_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_849_1117_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_849_1117_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_849_1117_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_849_1117_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buildingBuilder.BuildBase();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buildingBuilder.BuildWall();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buildingBuilder.BuildWindows();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buildingBuilder.BuildDoors();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buildingBuilder.BuildRooms();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buildingBuilder.BuildFloor();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;房子建造者，相当于抽象建造者角色</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;BuildingBuilder<br />
<img id="Codehighlighter1_1188_1624_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1188_1624_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1188_1624_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1188_1624_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1188_1624_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1188_1624_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1188_1624_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1188_1624_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1188_1624_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1188_1624_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;Building&nbsp;building;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;获得房子实例</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Building&nbsp;Building<br />
<img id="Codehighlighter1_1288_1336_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1288_1336_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1288_1336_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1288_1336_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1288_1336_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1288_1336_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1288_1336_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1288_1336_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1288_1336_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1288_1336_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_1306_1326_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1306_1326_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1306_1326_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1306_1326_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1306_1326_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1306_1326_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1306_1326_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1306_1326_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">get</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_1306_1326_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1306_1326_Open_Text"><span style="color: #000000">{&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;building;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;分部建造方法</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;BuildBase();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;BuildWall();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;BuildWindows();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;BuildDoors();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;BuildRooms();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;BuildFloor();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;住房建造者，相当于一个具体建造者角色</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;HousingBuilder&nbsp;:&nbsp;BuildingBuilder<br />
<img id="Codehighlighter1_1699_2441_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1699_2441_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1699_2441_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1699_2441_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1699_2441_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1699_2441_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1699_2441_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1699_2441_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1699_2441_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1699_2441_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;HousingBuilder()<br />
<img id="Codehighlighter1_1742_1802_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1742_1802_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1742_1802_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1742_1802_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1742_1802_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1742_1802_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1742_1802_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1742_1802_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1742_1802_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1742_1802_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;building&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Building(</span><span style="color: #800000">"</span><span style="color: #800000">Housing</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;BuildBase()<br />
<img id="Codehighlighter1_1853_1912_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1853_1912_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1853_1912_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1853_1912_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1853_1912_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1853_1912_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1853_1912_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1853_1912_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1853_1912_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1853_1912_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;building[</span><span style="color: #800000">"</span><span style="color: #800000">base</span><span style="color: #800000">"</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">Housing&nbsp;Base</span><span style="color: #800000">"</span><span style="color: #000000">;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;BuildWall()<br />
<img id="Codehighlighter1_1963_2022_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1963_2022_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1963_2022_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1963_2022_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1963_2022_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1963_2022_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1963_2022_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1963_2022_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1963_2022_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1963_2022_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;building[</span><span style="color: #800000">"</span><span style="color: #800000">wall</span><span style="color: #800000">"</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">Housing&nbsp;Wall</span><span style="color: #800000">"</span><span style="color: #000000">;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;BuildWindows()<br />
<img id="Codehighlighter1_2076_2127_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2076_2127_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_2076_2127_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_2076_2127_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_2076_2127_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2076_2127_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_2076_2127_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_2076_2127_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_2076_2127_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_2076_2127_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;building[</span><span style="color: #800000">"</span><span style="color: #800000">windows</span><span style="color: #800000">"</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">2</span><span style="color: #800000">"</span><span style="color: #000000">;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;BuildDoors()<br />
<img id="Codehighlighter1_2179_2228_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2179_2228_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_2179_2228_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_2179_2228_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_2179_2228_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2179_2228_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_2179_2228_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_2179_2228_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_2179_2228_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_2179_2228_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;building[</span><span style="color: #800000">"</span><span style="color: #800000">doors</span><span style="color: #800000">"</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">2</span><span style="color: #800000">"</span><span style="color: #000000">;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;BuildRooms()<br />
<img id="Codehighlighter1_2280_2329_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2280_2329_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_2280_2329_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_2280_2329_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_2280_2329_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2280_2329_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_2280_2329_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_2280_2329_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_2280_2329_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_2280_2329_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;building[</span><span style="color: #800000">"</span><span style="color: #800000">rooms</span><span style="color: #800000">"</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">3</span><span style="color: #800000">"</span><span style="color: #000000">;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;BuildFloor()<br />
<img id="Codehighlighter1_2381_2435_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2381_2435_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_2381_2435_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_2381_2435_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_2381_2435_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2381_2435_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_2381_2435_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_2381_2435_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_2381_2435_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_2381_2435_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;building[</span><span style="color: #800000">"</span><span style="color: #800000">floor</span><span style="color: #800000">"</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">3*20m2</span><span style="color: #800000">"</span><span style="color: #000000">;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;仓储房建造者，相当于一个具体建造者角色</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;StorageBuilder&nbsp;:&nbsp;BuildingBuilder<br />
<img id="Codehighlighter1_2517_3259_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2517_3259_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_2517_3259_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_2517_3259_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_2517_3259_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2517_3259_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_2517_3259_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_2517_3259_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_2517_3259_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_2517_3259_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;StorageBuilder()<br />
<img id="Codehighlighter1_2560_2620_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2560_2620_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_2560_2620_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_2560_2620_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_2560_2620_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2560_2620_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_2560_2620_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_2560_2620_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_2560_2620_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_2560_2620_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;building&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Building(</span><span style="color: #800000">"</span><span style="color: #800000">Storage</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;BuildBase()<br />
<img id="Codehighlighter1_2671_2730_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2671_2730_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_2671_2730_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_2671_2730_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_2671_2730_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2671_2730_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_2671_2730_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_2671_2730_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_2671_2730_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_2671_2730_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;building[</span><span style="color: #800000">"</span><span style="color: #800000">base</span><span style="color: #800000">"</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">Storage&nbsp;Base</span><span style="color: #800000">"</span><span style="color: #000000">;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;BuildWall()<br />
<img id="Codehighlighter1_2781_2840_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2781_2840_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_2781_2840_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_2781_2840_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_2781_2840_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2781_2840_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_2781_2840_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_2781_2840_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_2781_2840_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_2781_2840_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;building[</span><span style="color: #800000">"</span><span style="color: #800000">wall</span><span style="color: #800000">"</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">Storage&nbsp;Wall</span><span style="color: #800000">"</span><span style="color: #000000">;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;BuildWindows()<br />
<img id="Codehighlighter1_2894_2945_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2894_2945_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_2894_2945_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_2894_2945_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_2894_2945_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2894_2945_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_2894_2945_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_2894_2945_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_2894_2945_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_2894_2945_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;building[</span><span style="color: #800000">"</span><span style="color: #800000">windows</span><span style="color: #800000">"</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">0</span><span style="color: #800000">"</span><span style="color: #000000">;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;BuildDoors()<br />
<img id="Codehighlighter1_2997_3046_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2997_3046_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_2997_3046_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_2997_3046_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_2997_3046_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2997_3046_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_2997_3046_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_2997_3046_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_2997_3046_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_2997_3046_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;building[</span><span style="color: #800000">"</span><span style="color: #800000">doors</span><span style="color: #800000">"</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">1</span><span style="color: #800000">"</span><span style="color: #000000">;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;BuildRooms()<br />
<img id="Codehighlighter1_3098_3147_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_3098_3147_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_3098_3147_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_3098_3147_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_3098_3147_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_3098_3147_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_3098_3147_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_3098_3147_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_3098_3147_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_3098_3147_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;building[</span><span style="color: #800000">"</span><span style="color: #800000">rooms</span><span style="color: #800000">"</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">0</span><span style="color: #800000">"</span><span style="color: #000000">;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;BuildFloor()<br />
<img id="Codehighlighter1_3199_3253_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_3199_3253_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_3199_3253_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_3199_3253_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_3199_3253_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_3199_3253_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_3199_3253_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_3199_3253_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_3199_3253_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_3199_3253_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;building[</span><span style="color: #800000">"</span><span style="color: #800000">floor</span><span style="color: #800000">"</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">1000m2</span><span style="color: #800000">"</span><span style="color: #000000">;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;房子类，相当于产品类</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Building<br />
<img id="Codehighlighter1_3302_4305_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_3302_4305_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_3302_4305_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_3302_4305_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_3302_4305_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_3302_4305_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_3302_4305_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_3302_4305_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_3302_4305_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_3302_4305_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;_buildingType;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;使用一个字典来保存部分</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Dictionary</span><span style="color: #000000">&lt;</span><span style="color: #0000ff">string</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;_parts&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Dictionary</span><span style="color: #000000">&lt;</span><span style="color: #0000ff">string</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&gt;</span><span style="color: #000000">();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;构造器</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Building(</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;buildingType)<br />
<img id="Codehighlighter1_3532_3591_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_3532_3591_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_3532_3591_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_3532_3591_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_3532_3591_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_3532_3591_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_3532_3591_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_3532_3591_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_3532_3591_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_3532_3591_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">._buildingType&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;buildingType;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;索引器</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">[</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;key]<br />
<img id="Codehighlighter1_3655_3749_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_3655_3749_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_3655_3749_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_3655_3749_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_3655_3749_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_3655_3749_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_3655_3749_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_3655_3749_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_3655_3749_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_3655_3749_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img id="Codehighlighter1_3674_3697_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_3674_3697_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_3674_3697_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_3674_3697_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_3674_3697_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_3674_3697_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_3674_3697_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_3674_3697_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">get</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_3674_3697_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_3674_3697_Open_Text"><span style="color: #000000">{&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;_parts[key];&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img id="Codehighlighter1_3715_3739_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_3715_3739_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_3715_3739_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_3715_3739_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_3715_3739_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_3715_3739_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_3715_3739_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_3715_3739_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_3715_3739_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_3715_3739_Open_Text"><span style="color: #000000">{&nbsp;_parts[key]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;value;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;DisplayMe()<br />
<img id="Codehighlighter1_3791_4299_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_3791_4299_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_3791_4299_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_3791_4299_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_3791_4299_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_3791_4299_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_3791_4299_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_3791_4299_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_3791_4299_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_3791_4299_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #800000">"</span><span style="color: #800000">&nbsp;Building&nbsp;Type:&nbsp;{0}</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;_buildingType);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #800000">"</span><span style="color: #800000">&nbsp;Base&nbsp;:&nbsp;{0}</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;_parts[</span><span style="color: #800000">"</span><span style="color: #800000">base</span><span style="color: #800000">"</span><span style="color: #000000">]);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #800000">"</span><span style="color: #800000">&nbsp;Wall&nbsp;:&nbsp;{0}</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;_parts[</span><span style="color: #800000">"</span><span style="color: #800000">wall</span><span style="color: #800000">"</span><span style="color: #000000">]);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #800000">"</span><span style="color: #800000">&nbsp;#Windows&nbsp;:&nbsp;{0}</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;_parts[</span><span style="color: #800000">"</span><span style="color: #800000">windows</span><span style="color: #800000">"</span><span style="color: #000000">]);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #800000">"</span><span style="color: #800000">&nbsp;#Doors&nbsp;:&nbsp;{0}</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;_parts[</span><span style="color: #800000">"</span><span style="color: #800000">doors</span><span style="color: #800000">"</span><span style="color: #000000">]);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #800000">"</span><span style="color: #800000">&nbsp;#Rooms&nbsp;:&nbsp;{0}</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;_parts[</span><span style="color: #800000">"</span><span style="color: #800000">rooms</span><span style="color: #800000">"</span><span style="color: #000000">]);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #800000">"</span><span style="color: #800000">&nbsp;Floor&nbsp;:&nbsp;{0}</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;_parts[</span><span style="color: #800000">"</span><span style="color: #800000">floor</span><span style="color: #800000">"</span><span style="color: #000000">]);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></span></div>
<p>输出结果为：</p>
<p></span></span><span style="font-size: 10pt"><span style="font-size: 10pt"><br />
<span style="color: red">Building Type : Housing<br />
Base : Housing Base<br />
Wall : Housing Wall<br />
#Windows : 2<br />
#Doors : 2<br />
#Rooms : 3<br />
Floor : 3*20m2</span></p>
<p><span style="color: red">Building Type : Storage<br />
Base : Storage Base<br />
Wall : Storage Wall<br />
#Windows : 0<br />
#Doors : 1<br />
#Rooms : 0<br />
Floor : 1000m2</span></p>
</span></span>
<p><span style="font-size: 10pt"><strong style="font-size: 12pt; color: #000080">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;小结</strong></span></p>
<p><span style="font-size: 10pt">1、Builder模式主要用于&#8220;分步骤构建一个复杂的对象&#8221;。在这其中&#8220;分步骤&#8221;是稳定的，而复杂对象的各个部分则经常变化。<br />
2、Builder模式主要在于应对&#8220;复杂对象各个部分&#8221;的频繁需求变动。其缺点在于难以应对&#8220;分步骤构建算法&#8221;的需求变动。<br />
3、Abstract Factory模式解决&#8220;系列对象&#8221;的需求变化，Builder模式解决&#8220;对象部分&#8221;的需求变化。Builder械通常和Composite模式组合使用。</p>
<p style="font-size: 10pt" align="left"><span style="color: #ff0000"><span style="color: #ff0000"><strong><font size="2"><strong><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong><font size="2"><span style="color: #000000"><strong><font style="color: #000000" size="2"><strong><font size="2">Welcome to share our idea,thank you!欢迎分享您的想法,谢谢!</font></strong></font></strong></span></font></strong></font></strong></font></strong></span></span></p>
<p style="font-size: 10pt" align="left"><span style="color: #ff0000"><span style="color: #ff0000"><strong><font size="2"><strong><font size="2"><strong><font size="2"><span style="color: #000000">&nbsp;</span></font></strong></font></strong><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.cnblogs.com/Thriving-Country/archive/2009/03/10/1407933.html">大家一起学面向对象设计模式系列 索引贴</a></p>
</span></font></strong></span></span></span>
<img src="http://www.cnblogs.com/Thriving-Country/aggbug/1408036.html?type=1" width="1" height="1" alt=""/><p>评论: 1　<a href="http://www.cnblogs.com/Thriving-Country/archive/2009/03/18/1408036.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/Thriving-Country/archive/2009/03/18/1408036.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56819/" target="_blank">Yahoo脑震荡 关闭服务汇总贴</a><span style="color:gray">(2010-02-10 12:06)</span><br/>· <a href="http://news.cnblogs.com/n/56824/" target="_blank">2003年微软遭遇iTunes：我们彻底晕头转向了</a><span style="color:gray">(2010-02-10 12:06)</span><br/>· <a href="http://news.cnblogs.com/n/56823/" target="_blank">百度数据能被“作弊”软件篡改？百度:追究侵权</a><span style="color:gray">(2010-02-10 11:52)</span><br/>· <a href="http://news.cnblogs.com/n/56822/" target="_blank">Ksplice为Linux提供永远不用重启服务</a><span style="color:gray">(2010-02-10 11:51)</span><br/>· <a href="http://news.cnblogs.com/n/56821/" target="_blank">视频网站2010年格局之变：七成企业将被淘汰</a><span style="color:gray">(2010-02-10 11:48)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56812/" target="_blank">Google社会化产品Buzz发布会实录</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>大家一起学面向对象设计模式系列Chapter 27 附录－－61条面向对象设计的经验原则</title><link>http://www.cnblogs.com/Thriving-Country/archive/2009/03/16/1408100.html</link><dc:creator>GUO Xingwang</dc:creator><author>GUO Xingwang</author><pubDate>Mon, 16 Mar 2009 09:48:00 GMT</pubDate><guid>http://www.cnblogs.com/Thriving-Country/archive/2009/03/16/1408100.html</guid><description><![CDATA[<p>阅读: 338 评论: 5 作者: <a href="http://www.cnblogs.com/Thriving-Country/" target="_blank">GUO Xingwang</a> 发表于 2009-03-16 17:48 <a href="http://www.cnblogs.com/Thriving-Country/archive/2009/03/16/1408100.html" target="_blank">原文链接</a></p><h3>附录61条面向对象设计的经验原则(来源于互联网)</h3>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size: 10pt">我觉得这61条经验原则说的很好，所以我把它作为设计模式系列的一个附录贴到这里提供给大家参考（实际上与设计模式关系不大）。对于每一条原则我们都可以进行深入的思考，理解其中的内涵，遵循这些原则的设计可能在复用性和扩展性上会更好些。</span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>这些经验原则是:</strong></span></p>
<p><span style="font-size: 10pt">(1)所有数据都应该隐藏在所在的类的内部。</span></p>
<p><span style="font-size: 10pt">(2)类的使用者必须依赖类的共有接口，但类不能依赖它的使用者。</span></p>
<p><span style="font-size: 10pt">(3)尽量减少类的协议中的消息。</span></p>
<p><span style="font-size: 10pt">(4)实现所有类都理解的最基本公有接口[例如，拷贝操作(深拷贝和浅拷贝)、相等性判断、正确输出内容、从ASCII描述解析等等]。</span></p>
<p><span style="font-size: 10pt">(5)不要把实现细节(例如放置共用代码的私有函数)放到类的公有接口中。如果类的两个方法有一段公共代码，那么就可以创建一个防止这些公共代码的私有函数。 </span></p>
<p><span style="font-size: 10pt">(6)不要以用户无法使用或不感兴趣的东西扰乱类的公有接口。</span></p>
<p><span style="font-size: 10pt">(7)类之间应该零耦合，或者只有导出耦合关系。也即，一个类要么同另一个类毫无关系，要么只使用另一个类的公有接口中的操作。 </span></p>
<p><span style="font-size: 10pt">(8)类应该只表示一个关键抽象。包中的所有类对于同一类性质的变化应该是共同封闭的。一个变化若对一个包影响，则将对包中的所有类产生影响，而对其他的包不造成任何影响。</span></p>
<p><span style="font-size: 10pt">(9)把相关的数据和行为集中放置。设计者应当留意那些通过get之类操作从别的对象中获取数据的对象。这种类型的行为暗示着这条经验原则被违反了。 </span></p>
<p><span style="font-size: 10pt">(10)把不相关的信息放在另一个类中(也即：互不沟通的行为)。朝着稳定的方向进行依赖。</span></p>
<p><span style="font-size: 10pt">(11)确保你为之建模的抽象概念是类，而不只是对象扮演的角色。</span></p>
<p><span style="font-size: 10pt">(12)在水平方向上尽可能统一地分布系统功能，也即：按照设计，顶层类应当统一地共享工作。</span></p>
<p><span style="font-size: 10pt">(13)在你的系统中不要创建全能类/对象。对名字包含Driver、Manager、System、Susystem的类要特别多加小心。规划一个接口而不是实现一个接口。 </span></p>
<p><span style="font-size: 10pt">(14)对公共接口中定义了大量访问方法的类多加小心。大量访问方法意味着相关数据和行为没有集中存放。</span></p>
<p><span style="font-size: 10pt">(15)对包含太多互不沟通的行为的类多加小心。这个问题的另一表现是在你的应用程序中的类的公有接口中创建了很多的get和set函数。 </span></p>
<p><span style="font-size: 10pt">(16)在由同用户界面交互的面向对象模型构成的应用程序中，模型不应该依赖于界面，界面则应当依赖于模型。</span></p>
<p><span style="font-size: 10pt">(17)尽可能地按照现实世界建模(我们常常为了遵守系统功能分布原则、避免全能类原则以及集中放置相关数据和行为的原则而违背这条原则) 。</span></p>
<p><span style="font-size: 10pt">(18)从你的设计中去除不需要的类。一般来说，我们会把这个类降级成一个属性。 </span></p>
<p><span style="font-size: 10pt">(19)去除系统外的类。系统外的类的特点是，抽象地看它们只往系统领域发送消息但并不接受系统领域内其他类发出的消息。 </span></p>
<p><span style="font-size: 10pt">(20)不要把操作变成类。质疑任何名字是动词或者派生自动词的类，特别是只有一个有意义行为的类。考虑一下那个有意义的行为是否应当迁移到已经存在或者尚未发现的某个类中。</span></p>
<p><span style="font-size: 10pt">(21)我们在创建应用程序的分析模型时常常引入代理类。在设计阶段，我们常会发现很多代理没有用的，应当去除。</span></p>
<p><span style="font-size: 10pt">(22)尽量减少类的协作者的数量。一个类用到的其他类的数目应当尽量少。</span></p>
<p><span style="font-size: 10pt">(23)尽量减少类和协作者之间传递的消息的数量。</span></p>
<p><span style="font-size: 10pt">(24)尽量减少类和协作者之间的协作量，也即：减少类和协作者之间传递的不同消息的数量。</span></p>
<p><span style="font-size: 10pt">(25)尽量减少类的扇出，也即：减少类定义的消息数和发送的消息数的乘积。</span></p>
<p><span style="font-size: 10pt">(26)如果类包含另一个类的对象，那么包含类应当给被包含的对象发送消息。也即：包含关系总是意味着使用关系。</span></p>
<p><span style="font-size: 10pt">(27)类中定义的大多数方法都应当在大多数时间里使用大多数数据成员。</span></p>
<p><span style="font-size: 10pt">(28)类包含的对象数目不应当超过开发者短期记忆的容量。这个数目常常是6。当类包含多于6个数据成员时，可以把逻辑相关的数据成员划分为一组，然后用一个新的包含类去包含这一组成员。</span></p>
<p><span style="font-size: 10pt">(29)让系统功能在窄而深的继承体系中垂直分布。</span></p>
<p><span style="font-size: 10pt">(30)在实现语义约束时，最好根据类定义来实现。这常常会导致类泛滥成灾，在这种情况下，约束应当在类的行为中实现，通常是在构造函数中实现，但不是必须如此。</span></p>
<p><span style="font-size: 10pt">(31)在类的构造函数中实现语义约束时，把约束测试放在构造函数领域所允许的尽量深的包含层次中。</span></p>
<p><span style="font-size: 10pt">(32)约束所依赖的语义信息如果经常改变，那么最好放在一个集中式的第3方对象中。</span></p>
<p><span style="font-size: 10pt">(33)约束所依赖的语义信息如果很少改变，那么最好分布在约束所涉及的各个类中。</span></p>
<p><span style="font-size: 10pt">(34)类必须知道它包含什么，但是不能知道谁包含它。</span></p>
<p><span style="font-size: 10pt">(35)共享字面范围(也就是被同一个类所包含)的对象相互之间不应当有使用关系。</span></p>
<p><span style="font-size: 10pt">(36)继承只应被用来为特化层次结构建模。</span></p>
<p><span style="font-size: 10pt">(37)派生类必须知道基类，基类不应该知道关于它们的派生类的任何信息。</span></p>
<p><span style="font-size: 10pt">(38)基类中的所有数据都应当是私有的，不要使用保护数据。类的设计者永远都不应该把类的使用者不需要的东西放在公有接口中。 </span></p>
<p><span style="font-size: 10pt">(39)在理论上，继承层次体系应当深一点，越深越好。</span></p>
<p><span style="font-size: 10pt">(40)在实践中，继承层次体系的深度不应当超出一个普通人的短期记忆能力。一个广为接受的深度值是6。</span></p>
<p><span style="font-size: 10pt">(41)所有的抽象类都应当是基类。</span></p>
<p><span style="font-size: 10pt">(42)所有的基类都应当是抽象类。</span></p>
<p><span style="font-size: 10pt">(43)把数据、行为和/或接口的共性尽可能地放到继承层次体系的高端。</span></p>
<p><span style="font-size: 10pt">(44)如果两个或更多个类共享公共数据(但没有公共行为)，那么应当把公共数据放在一个类中，每个共享这个数据的类都包含这个类。 </span></p>
<p><span style="font-size: 10pt">(45)如果两个或更多个类有共同的数据和行为(就是方法)，那么这些类的每一个都应当从一个表示了这些数据和方法的公共基类继承。 </span></p>
<p><span style="font-size: 10pt">(46)如果两个或更多个类共享公共接口(指的是消息，而不是方法)，那么只有他们需要被多态地使用时，他们才应当从一个公共基类继承。</span></p>
<p><span style="font-size: 10pt">(47)对对象类型的显示的分情况分析一般是错误的。在大多数这样的情况下，设计者应当使用多态。</span></p>
<p><span style="font-size: 10pt">(48)对属性值的显示的分情况分析常常是错误的。类应当解耦合成一个继承层次结构，每个属性值都被变换成一个派生类。</span></p>
<p><span style="font-size: 10pt">(49)不要通过继承关系来为类的动态语义建模。试图用静态语义关系来为动态语义建模会导致在运行时切换类型。</span></p>
<p><span style="font-size: 10pt">(50)不要把类的对象变成派生类。对任何只有一个实例的派生类都要多加小心。</span></p>
<p><span style="font-size: 10pt">(51)如果你觉得需要在运行时刻创建新的类，那么退后一步以认清你要创建的是对象。现在，把这些对象概括成一个类。 </span></p>
<p><span style="font-size: 10pt">(52)在派生类中用空方法(也就是什么也不做的方法)来覆写基类中的方法应当是非法的。</span></p>
<p><span style="font-size: 10pt">(53)不要把可选包含同对继承的需要相混淆。把可选包含建模成继承会带来泛滥成灾的类。</span></p>
<p><span style="font-size: 10pt">(54)在创建继承层次时，试着创建可复用的框架，而不是可复用的组件。</span></p>
<p><span style="font-size: 10pt">(55)如果你在设计中使用了多重继承，先假设你犯了错误。如果没犯错误，你需要设法证明。</span></p>
<p><span style="font-size: 10pt">(56)只要在面向对象设计中用到了继承，问自己两个问题：(1)派生类是否是它继承的那个东西的一个特殊类型？(2)基类是不是派生类的一部分？</span></p>
<p><span style="font-size: 10pt">(57)如果你在一个面向对象设计中发现了多重继承关系，确保没有哪个基类实际上是另一个基类的派生类。</span></p>
<p><span style="font-size: 10pt">(58)在面向对象设计中如果你需要在包含关系和关联关系间作出选择，请选择包含关系。</span></p>
<p><span style="font-size: 10pt">(59)不要把全局数据或全局函数用于类的对象的薄记工作。应当使用类变量或类方法。</span></p>
<p><span style="font-size: 10pt">(60)面向对象设计者不应当让物理设计准则来破坏他们的逻辑设计。但是，在对逻辑设计作出决策的过程中我们经常用到物理设计准则。</span></p>
<p><span style="font-size: 10pt">(61)不要绕开公共接口去修改对象的状态。</span></p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Welcome to share your idea,thank you!欢迎分享您的想法,谢谢!</strong></span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.cnblogs.com/Thriving-Country/archive/2009/03/10/1407933.html"><font size="2">大家一起学面向对象设计模式系列 索引贴</font></a><br />
</p>
<img src="http://www.cnblogs.com/Thriving-Country/aggbug/1408100.html?type=1" width="1" height="1" alt=""/><p>评论: 5　<a href="http://www.cnblogs.com/Thriving-Country/archive/2009/03/16/1408100.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/Thriving-Country/archive/2009/03/16/1408100.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56819/" target="_blank">Yahoo脑震荡 关闭服务汇总贴</a><span style="color:gray">(2010-02-10 12:06)</span><br/>· <a href="http://news.cnblogs.com/n/56824/" target="_blank">2003年微软遭遇iTunes：我们彻底晕头转向了</a><span style="color:gray">(2010-02-10 12:06)</span><br/>· <a href="http://news.cnblogs.com/n/56823/" target="_blank">百度数据能被“作弊”软件篡改？百度:追究侵权</a><span style="color:gray">(2010-02-10 11:52)</span><br/>· <a href="http://news.cnblogs.com/n/56822/" target="_blank">Ksplice为Linux提供永远不用重启服务</a><span style="color:gray">(2010-02-10 11:51)</span><br/>· <a href="http://news.cnblogs.com/n/56821/" target="_blank">视频网站2010年格局之变：七成企业将被淘汰</a><span style="color:gray">(2010-02-10 11:48)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56812/" target="_blank">Google社会化产品Buzz发布会实录</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>大家一起学面向对象设计模式系列Chapter 03 抽象工厂(Abstract Factory)</title><link>http://www.cnblogs.com/Thriving-Country/archive/2009/03/16/1408032.html</link><dc:creator>GUO Xingwang</dc:creator><author>GUO Xingwang</author><pubDate>Mon, 16 Mar 2009 09:43:00 GMT</pubDate><guid>http://www.cnblogs.com/Thriving-Country/archive/2009/03/16/1408032.html</guid><description><![CDATA[<p>阅读: 1701 评论: 8 作者: <a href="http://www.cnblogs.com/Thriving-Country/" target="_blank">GUO Xingwang</a> 发表于 2009-03-16 17:43 <a href="http://www.cnblogs.com/Thriving-Country/archive/2009/03/16/1408032.html" target="_blank">原文链接</a></p><p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size: 10pt">现在我们正式进入GoF23种设计模式中的创建型模式的讲解中来，创建型模式主要解决对象如何创建的问题，提倡创建对象的责任和使用对象的责任分离，以达到更好对创建对象的控制的目的，创建型模式主要包括抽象工厂(Abstract Factory)，建造者(Builder)，工厂方法(Factory Method)，原型(Prototype)，单子(Singleton)。这篇文章主要分为两大部分内容，在第一部分中我将介绍抽象工厂模式的原型，包括抽象工厂的意图，可以解决的问题，原型代码和UML等，再结合一个生活中的小例子进行原型的说明。第二部分我会结合实际项目来讲述一下抽象工厂模式是如何应用的。最后我会对抽象工厂模式进行一个小结。</span></font></p>
<p><span style="font-size: 10pt"><span style="color: #000080"><span style="color: #000080"><strong><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;工厂模式的几种形态</span></strong></span></span></span></p>
<p><font face="Verdana"><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;工厂模式专门负责将大量有共同接口的类实例化。工厂模式可以动态决定将哪一个类实例化，不必事先知道每次要实例化哪一个类。工厂模式有以下几种形态：</span></font></p>
<p><font face="Verdana"><span style="font-size: 10pt"><strong>简单工厂（Simple Factory）模式：</strong>又称静态工厂方法模式（Static Factory Method Pattern）。主要是工厂中提供一个静态的方法用来根据不同的参数创建不同的抽象产品的具体实例，一般在IoC中应用比较多，例如通过反射机制和简单工厂模式可以解决依赖注入的问题。简单工厂模式不属于GoF23种设计模式，这里也就不再作过多的分析。感兴趣的园友可以找找相关资料。</span></font></p>
<p><font face="Verdana"><span style="font-size: 10pt"><strong>工厂方法（Factory Method）模式：</strong>又称多态性工厂（Polymorphic Factory）模式或虚拟构造子（Virtual Constructor）模式。这个模式属于GoF23种设计模式之一，在后面的文章中会做详细的介绍。</span></font></p>
<p><font face="Verdana"><span style="font-size: 10pt"><strong>抽象工厂（Abstract Factory）模式：</strong>又称工具箱（Kit或Toolkit）模式。这是本文的重点。</span></font></p>
<p><span style="font-size: 12pt"><strong><span style="color: #000080"><span style="color: #000080">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;抽象工厂模式的原型</span></span></strong></span></p>
<p><font face="Verdana"><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>描述:</strong></span></font></p>
<p><font face="Verdana"><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;假设一个子系统需要一些产品对象，而这些产品对象又属于一个以上的产品等级结构。那么为了将消费这些产品的责任和创建这些产品对象的责任分割开来，可以引进抽象工厂模式。这样的话，消费产品的一方不需要直接参与产品的创建工作，而只需要向一个公用的工厂接口请求所需要的产品。</span></font></p>
<p><font face="Verdana"></font><font face="Verdana"><span style="font-size: 10pt"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;意图：</strong></span></font></p>
<p><font face="Verdana"><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;抽象工厂模式可以向客户端（Client指代码模式的使用者，后文类同）提供一个接口，使得客户端在不必指定产品的具体类型的情况下，创建多个产品族（Product Family指位于不同产品等级中，功能相关联的产品的集合）中的产品对象。</span></font></p>
<p><font face="Verdana"><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>模式原型UML：</strong></span></font></p>
<p><font face="Verdana"></font>&nbsp;</p>
<font face="Verdana"><span style="font-size: 10pt">
<p align="center"><strong><img height="471" alt="" src="http://www.cnblogs.com/images/cnblogs_com/thriving-country/designpattern20090316/abstractfactory.gif" width="437" border="0" /></strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;抽象工厂涉及到以下角色：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;抽象工厂（AbstractFactory ）角色：声明一个操作集合的接口以创建抽象产品族。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;具体工厂（ConcreteFactory）角色：实现创建具体产品族的抽象工厂的实现。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;抽象产品（AbstractProduct ）角色：声明一个产品的接口。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;具体产品（Product）角色：定义了一个被具体工厂创建的产品对象，实现了抽象工厂接口。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;客户端（Client）角色：使用抽象工厂和抽象产品的类。</p>
<p><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 模式原型代码：</strong></span></font></p>
<p><font face="Verdana"><span style="font-size: 10pt"></p>
<div class="cnblogs_code"><img id="Code_Closed_Image_111011" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_111011').style.display='none'; document.getElementById('Code_Open_Image_111011').style.display='inline'; document.getElementById('Code_Open_Text_111011').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top"><img id="Code_Open_Image_111011" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_111011').style.display='none'; getElementById('Code_Closed_Image_111011').style.display='inline'; getElementById('Code_Closed_Text_111011').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span class="cnblogs_code_Collapse" id="Code_Closed_Text_111011">Abstract Factory pattern code in C#</span><span id="Code_Open_Text_111011" style="display: none"><br />
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #008000">//</span><span style="color: #008000">&nbsp;抽象工厂模式原型代码</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;DesignPatterns.Creational<br />
<img id="Codehighlighter1_66_2609_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_66_2609_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_66_2609_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_66_2609_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_66_2609_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_66_2609_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_66_2609_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_66_2609_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span id="Codehighlighter1_66_2609_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_66_2609_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;测试程序</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;MainApp<br />
<img id="Codehighlighter1_104_524_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_104_524_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_104_524_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_104_524_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_104_524_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_104_524_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_104_524_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_104_524_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_104_524_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_104_524_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Main()<br />
<img id="Codehighlighter1_148_518_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_148_518_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_148_518_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_148_518_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_148_518_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_148_518_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_148_518_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_148_518_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_148_518_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_148_518_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;抽象工厂1&nbsp;</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AbstractFactory&nbsp;factory1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ConcreteFactory1();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Client&nbsp;c1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Client(factory1);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c1.Run();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;抽象工厂2&nbsp;</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AbstractFactory&nbsp;factory2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ConcreteFactory2();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Client&nbsp;c2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Client(factory2);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c2.Run();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;等候用户输入&nbsp;</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.Read();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;抽象工厂</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;AbstractFactory<br />
<img id="Codehighlighter1_578_703_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_578_703_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_578_703_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_578_703_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_578_703_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_578_703_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_578_703_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_578_703_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_578_703_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_578_703_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;AbstractProductA&nbsp;CreateProductA();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;AbstractProductB&nbsp;CreateProductB();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;具体工厂1</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;ConcreteFactory1&nbsp;:&nbsp;AbstractFactory<br />
<img id="Codehighlighter1_768_1003_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_768_1003_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_768_1003_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_768_1003_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_768_1003_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_768_1003_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_768_1003_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_768_1003_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_768_1003_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_768_1003_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;AbstractProductA&nbsp;CreateProductA()<br />
<img id="Codehighlighter1_836_883_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_836_883_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_836_883_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_836_883_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_836_883_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_836_883_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_836_883_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_836_883_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_836_883_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_836_883_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ProductA1();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;AbstractProductB&nbsp;CreateProductB()<br />
<img id="Codehighlighter1_950_997_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_950_997_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_950_997_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_950_997_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_950_997_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_950_997_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_950_997_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_950_997_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_950_997_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_950_997_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ProductB1();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;具体工厂2&nbsp;</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;ConcreteFactory2&nbsp;:&nbsp;AbstractFactory<br />
<img id="Codehighlighter1_1069_1304_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1069_1304_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1069_1304_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1069_1304_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1069_1304_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1069_1304_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1069_1304_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1069_1304_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1069_1304_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1069_1304_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;AbstractProductA&nbsp;CreateProductA()<br />
<img id="Codehighlighter1_1137_1184_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1137_1184_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1137_1184_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1137_1184_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1137_1184_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1137_1184_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1137_1184_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1137_1184_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1137_1184_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1137_1184_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ProductA2();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;AbstractProductB&nbsp;CreateProductB()<br />
<img id="Codehighlighter1_1251_1298_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1251_1298_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1251_1298_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1251_1298_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1251_1298_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1251_1298_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1251_1298_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1251_1298_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1251_1298_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1251_1298_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ProductB2();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;抽象产品A，产品族中一个成员</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;AbstractProductA<br />
<img id="Codehighlighter1_1369_1376_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1369_1376_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1369_1376_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1369_1376_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1369_1376_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1369_1376_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1369_1376_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1369_1376_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1369_1376_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1369_1376_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;抽象产品B，产品族中一个成员&nbsp;</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;AbstractProductB<br />
<img id="Codehighlighter1_1442_1508_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1442_1508_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1442_1508_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1442_1508_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1442_1508_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1442_1508_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1442_1508_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1442_1508_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1442_1508_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1442_1508_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Interact(AbstractProductA&nbsp;a);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;具体产品A1</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;ProductA1&nbsp;:&nbsp;AbstractProductA<br />
<img id="Codehighlighter1_1568_1575_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1568_1575_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1568_1575_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1568_1575_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1568_1575_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1568_1575_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1568_1575_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1568_1575_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1568_1575_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1568_1575_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;具体产品B1</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;ProductB1&nbsp;:&nbsp;AbstractProductB<br />
<img id="Codehighlighter1_1635_1826_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1635_1826_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1635_1826_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1635_1826_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1635_1826_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1635_1826_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1635_1826_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1635_1826_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1635_1826_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1635_1826_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Interact(AbstractProductA&nbsp;a)<br />
<img id="Codehighlighter1_1703_1820_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1703_1820_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1703_1820_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1703_1820_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1703_1820_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1703_1820_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1703_1820_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1703_1820_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1703_1820_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1703_1820_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #0000ff">this</span><span style="color: #000000">.GetType().Name&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">&nbsp;interacts&nbsp;with&nbsp;</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;a.GetType().Name);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;具体产品A2</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;ProductA2&nbsp;:&nbsp;AbstractProductA<br />
<img id="Codehighlighter1_1886_1893_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1886_1893_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1886_1893_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1886_1893_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1886_1893_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1886_1893_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1886_1893_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1886_1893_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1886_1893_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1886_1893_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;具体产品B2</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;ProductB2&nbsp;:&nbsp;AbstractProductB<br />
<img id="Codehighlighter1_1953_2144_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1953_2144_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1953_2144_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1953_2144_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1953_2144_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1953_2144_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1953_2144_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1953_2144_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1953_2144_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1953_2144_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Interact(AbstractProductA&nbsp;a)<br />
<img id="Codehighlighter1_2021_2138_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2021_2138_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_2021_2138_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_2021_2138_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_2021_2138_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2021_2138_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_2021_2138_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_2021_2138_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_2021_2138_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_2021_2138_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #0000ff">this</span><span style="color: #000000">.GetType().Name&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">&nbsp;interacts&nbsp;with&nbsp;</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;a.GetType().Name);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;客户端，使用环境&nbsp;</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Client<br />
<img id="Codehighlighter1_2185_2607_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2185_2607_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_2185_2607_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_2185_2607_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_2185_2607_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2185_2607_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_2185_2607_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_2185_2607_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_2185_2607_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_2185_2607_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;AbstractProductA&nbsp;AbstractProductA;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;AbstractProductB&nbsp;AbstractProductB;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;构造，注意通过构造传入抽象工厂</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Client(AbstractFactory&nbsp;factory)<br />
<img id="Codehighlighter1_2372_2497_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2372_2497_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_2372_2497_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_2372_2497_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_2372_2497_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2372_2497_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_2372_2497_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_2372_2497_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_2372_2497_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_2372_2497_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AbstractProductB&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;factory.CreateProductB();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AbstractProductA&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;factory.CreateProductA();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Run()<br />
<img id="Codehighlighter1_2533_2601_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2533_2601_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_2533_2601_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_2533_2601_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_2533_2601_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2533_2601_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_2533_2601_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_2533_2601_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_2533_2601_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_2533_2601_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AbstractProductB.Interact(AbstractProductA);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span></span></div>
<p>输出结果为：</p>
<p><span style="color: red">ProductB1 interacts with ProductA1<br />
ProductB2 interacts with ProductA2</span></p>
<p style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>生活中的实例：</strong></span></font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size: 10pt">这个生活中的实例代码演示了一个电脑游戏，在游戏中建立不同的动物世界会使用不同的工厂。虽然创建动物的大陆工厂是不同的，但是动物之间的相互关系保持不变。</span><span style="font-size: 10pt"></p>
<p></span></p>
<div class="cnblogs_code"><img id="Code_Closed_Image_164336" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_164336').style.display='none'; document.getElementById('Code_Open_Image_164336').style.display='inline'; document.getElementById('Code_Open_Text_164336').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top"><img id="Code_Open_Image_164336" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_164336').style.display='none'; getElementById('Code_Closed_Image_164336').style.display='inline'; getElementById('Code_Closed_Text_164336').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span class="cnblogs_code_Collapse" id="Code_Closed_Text_164336">Real world code using Abstract Factory in C#</span><span id="Code_Open_Text_164336" style="display: none"><br />
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;DesignPatterns.Creational.AbstractFactory.RealWorld<br />
<img id="Codehighlighter1_77_2600_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_77_2600_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_77_2600_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_77_2600_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_77_2600_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_77_2600_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_77_2600_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_77_2600_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span id="Codehighlighter1_77_2600_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_77_2600_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;MainApp<br />
<img id="Codehighlighter1_102_553_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_102_553_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_102_553_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_102_553_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_102_553_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_102_553_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_102_553_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_102_553_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_102_553_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_102_553_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Main()<br />
<img id="Codehighlighter1_146_547_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_146_547_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_146_547_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_146_547_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_146_547_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_146_547_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_146_547_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_146_547_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_146_547_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_146_547_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;创建非洲大陆</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ContinentFactory&nbsp;africa&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;AfricaFactory();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AnimalWorld&nbsp;world&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;AnimalWorld(africa);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;world.RunFoodChain();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;创建美洲大陆</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ContinentFactory&nbsp;america&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;AmericaFactory();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;world&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;AnimalWorld(america);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;world.RunFoodChain();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;等待用户输入</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.ReadKey();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;抽象工厂</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;ContinentFactory<br />
<img id="Codehighlighter1_607_757_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_607_757_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_607_757_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_607_757_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_607_757_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_607_757_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_607_757_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_607_757_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_607_757_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_607_757_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;创建食草动物</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;Herbivore&nbsp;CreateHerbivore();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;创建食肉动物</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;Carnivore&nbsp;CreateCarnivore();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;具体工厂1</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;AfricaFactory&nbsp;:&nbsp;ContinentFactory<br />
<img id="Codehighlighter1_819_1079_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_819_1079_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_819_1079_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_819_1079_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_819_1079_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_819_1079_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_819_1079_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_819_1079_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_819_1079_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_819_1079_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;Herbivore&nbsp;CreateHerbivore()<br />
<img id="Codehighlighter1_881_949_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_881_949_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_881_949_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_881_949_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_881_949_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_881_949_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_881_949_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_881_949_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_881_949_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_881_949_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;返回牛羚</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Wildebeest();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;Carnivore&nbsp;CreateCarnivore()<br />
<img id="Codehighlighter1_1011_1073_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1011_1073_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1011_1073_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1011_1073_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1011_1073_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1011_1073_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1011_1073_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1011_1073_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1011_1073_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1011_1073_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;返回狮子</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Lion();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;具体工厂2</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;AmericaFactory&nbsp;:&nbsp;ContinentFactory<br />
<img id="Codehighlighter1_1142_1396_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1142_1396_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1142_1396_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1142_1396_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1142_1396_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1142_1396_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1142_1396_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1142_1396_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1142_1396_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1142_1396_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;Herbivore&nbsp;CreateHerbivore()<br />
<img id="Codehighlighter1_1204_1267_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1204_1267_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1204_1267_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1204_1267_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1204_1267_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1204_1267_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1204_1267_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1204_1267_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1204_1267_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1204_1267_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;返回野牛</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Bison();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;Carnivore&nbsp;CreateCarnivore()<br />
<img id="Codehighlighter1_1329_1390_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1329_1390_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1329_1390_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1329_1390_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1329_1390_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1329_1390_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1329_1390_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1329_1390_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1329_1390_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1329_1390_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;返回狼</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Wolf();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;抽象产品A</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Herbivore<br />
<img id="Codehighlighter1_1444_1452_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1444_1452_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1444_1452_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1444_1452_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1444_1452_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1444_1452_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1444_1452_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1444_1452_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1444_1452_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1444_1452_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;抽象产品B</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Carnivore<br />
<img id="Codehighlighter1_1500_1583_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1500_1583_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1500_1583_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1500_1583_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1500_1583_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1500_1583_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1500_1583_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1500_1583_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1500_1583_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1500_1583_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;交互关系，食肉动物可以吃掉食草动物</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Eat(Herbivore&nbsp;h);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;具体产品A1</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Wildebeest&nbsp;:&nbsp;Herbivore<br />
<img id="Codehighlighter1_1636_1644_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1636_1644_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1636_1644_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1636_1644_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1636_1644_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1636_1644_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1636_1644_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1636_1644_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1636_1644_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1636_1644_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;具体产品B1</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Lion&nbsp;:&nbsp;Carnivore<br />
<img id="Codehighlighter1_1691_1881_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1691_1881_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1691_1881_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1691_1881_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1691_1881_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1691_1881_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1691_1881_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1691_1881_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1691_1881_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1691_1881_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Eat(Herbivore&nbsp;h)<br />
<img id="Codehighlighter1_1748_1875_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1748_1875_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1748_1875_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1748_1875_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1748_1875_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1748_1875_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1748_1875_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1748_1875_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1748_1875_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1748_1875_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;吃掉牛羚</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #0000ff">this</span><span style="color: #000000">.GetType().Name&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">&nbsp;eats&nbsp;</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;h.GetType().Name);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;具体产品A2</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Bison&nbsp;:&nbsp;Herbivore<br />
<img id="Codehighlighter1_1929_1937_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1929_1937_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1929_1937_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1929_1937_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1929_1937_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1929_1937_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1929_1937_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1929_1937_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1929_1937_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1929_1937_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;具体产品B2</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Wolf&nbsp;:&nbsp;Carnivore<br />
<img id="Codehighlighter1_1984_2174_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1984_2174_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1984_2174_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1984_2174_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1984_2174_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1984_2174_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1984_2174_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1984_2174_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1984_2174_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1984_2174_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Eat(Herbivore&nbsp;h)<br />
<img id="Codehighlighter1_2041_2168_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2041_2168_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_2041_2168_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_2041_2168_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_2041_2168_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2041_2168_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_2041_2168_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_2041_2168_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_2041_2168_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_2041_2168_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;吃掉野牛</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #0000ff">this</span><span style="color: #000000">.GetType().Name&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">&nbsp;eats&nbsp;</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;h.GetType().Name);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;客户端</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;AnimalWorld<br />
<img id="Codehighlighter1_2213_2598_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2213_2598_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_2213_2598_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_2213_2598_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_2213_2598_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2213_2598_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_2213_2598_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_2213_2598_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_2213_2598_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_2213_2598_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Herbivore&nbsp;_herbivore;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Carnivore&nbsp;_carnivore;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;通过构造器传入具体工厂</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;AnimalWorld(ContinentFactory&nbsp;factory)<br />
<img id="Codehighlighter1_2378_2495_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2378_2495_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_2378_2495_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_2378_2495_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_2378_2495_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2378_2495_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_2378_2495_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_2378_2495_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_2378_2495_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_2378_2495_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_carnivore&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;factory.CreateCarnivore();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_herbivore&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;factory.CreateHerbivore();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;RunFoodChain()<br />
<img id="Codehighlighter1_2540_2592_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2540_2592_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_2540_2592_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_2540_2592_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_2540_2592_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2540_2592_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_2540_2592_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_2540_2592_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_2540_2592_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_2540_2592_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_carnivore.Eat(_herbivore);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></span></div>
<p><span style="font-size: 10pt">输出的结果为：</span><span style="font-size: 10pt"></p>
<div class="output"><span style="color: red">Lion eats Wildebeest<br />
Wolf eats Bison</span></div>
<div class="output">&nbsp;</div>
</span>
<p><span style="font-size: 10pt"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;什么情况下使用抽象工厂：</strong></span></p>
<p style="font-size: 10pt">文献【GOF95】指出，在以下情况下应当考虑使用抽象工厂模式：<br />
1.一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节，这对于所有形态的工厂模式都是重要的。<br />
2、这个系统的产品有多于一个产品族，而系统只消费其中某一个族的产品（上面这一条叫做抽象工厂模式的原始用意。）<br />
3、同属于同一个产品族的产品是在一起使用的，这一约束必须在系统的设计中体现出来。<br />
4、系统提供一个产品类的库，所有的产品以同样的接口实现，从而使客户端不依赖于实现。</p>
<p style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong style="font-size: 12pt; color: #000080">实际项目举例</strong></p>
<p style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;现在需要创建分属于不同操作系统的视窗构件。比如命令按钮（Button）与文本框（Text）等都是视窗构件，在UNIX系统的视窗环境和Windows操作系统的视窗环境中，这两个构件有不同的本地体现，它们的细节也有所不同。在每一个操作系统中，都有一个视窗构件组成构件家族。在这里就是Button和Text组成的产品族。而每一个视窗构件都构成自己的等级结构，由一个抽象角色给出抽象的功能描述，而由具体子类给出不同操作系统的具体实现，如下图所示。</p>
<p align="center"><img height="138" alt="" src="http://www.cnblogs.com/images/cnblogs_com/thriving-country/designpattern20090316/anli1.png" width="499" border="0" /></p>
<p align="left"><font style="font-size: 10pt" face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;可以发现在上面的产品类图中，有两个产品的等级结构，分别是Button等级结构和Text等级结构、同时有两个产品族，也就是UNIX产品族和Windows产品族。UNIX产品族由UnixButton和UnixText产品组成；而Windows产品族由WinButton和WinText产品构成。</font></p>
<p align="left"><font style="font-size: 10pt" face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;系统对产品对象的创建需求由一个工厂的等级结构满足，其中有两个具体工厂角色，即UnixFactory和WinFactory。UnixFactory对象负责创建Unix产品族中的产品，而WinFactory对象负责创建Windows产品族中的产品。这就是抽象工厂模式的应用，抽象工厂模式的解决方案如下图所示。</font></p>
<p align="center"><img height="274" alt="" src="http://www.cnblogs.com/images/cnblogs_com/thriving-country/designpattern20090316/anli2.png" width="423" border="0" /></p>
<p align="left"><font style="font-size: 10pt" face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;显然，一个系统只能够在某一个操作系统的视窗环境下运行，而不能够同时在不同的操作系统上运行。所以，系统实际上只能消费属于同一个产品族的产品。这个案例实际上也正是抽象工厂模式的起源。实现的代码如下。</font></p>
<p align="left"><font size="2"></font>&nbsp;</p>
<p align="left"><font size="2"></font></p>
<div class="cnblogs_code"><img id="Code_Closed_Image_171215" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_171215').style.display='none'; document.getElementById('Code_Open_Image_171215').style.display='inline'; document.getElementById('Code_Open_Text_171215').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top"><img id="Code_Open_Image_171215" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_171215').style.display='none'; getElementById('Code_Closed_Image_171215').style.display='inline'; getElementById('Code_Closed_Text_171215').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span class="cnblogs_code_Collapse" id="Code_Closed_Text_171215">Project code using Abstract Factory in C#</span><span id="Code_Open_Text_171215" style="display: none"><br />
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #008000">//</span><span style="color: #008000">&nbsp;抽象工厂起源案例</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;DesignPatterns.Creational.AbstractFactory.Project<br />
<img id="Codehighlighter1_88_2453_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_88_2453_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_88_2453_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_88_2453_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_88_2453_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_88_2453_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_88_2453_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_88_2453_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span id="Codehighlighter1_88_2453_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_88_2453_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;MainApp<br />
<img id="Codehighlighter1_113_522_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_113_522_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_113_522_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_113_522_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_113_522_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_113_522_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_113_522_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_113_522_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_113_522_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_113_522_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Main()<br />
<img id="Codehighlighter1_157_516_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_157_516_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_157_516_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_157_516_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_157_516_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_157_516_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_157_516_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_157_516_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_157_516_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_157_516_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;创建Unix使用环境</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OSFactory&nbsp;unix&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;UnixFactory();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Client&nbsp;client&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Client(unix);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;client.Run();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;创建Windows使用环境</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OSFactory&nbsp;windows&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;WinFactory();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;client&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Client(windows);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;client.Run();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;等待用户输入</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.ReadKey();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;抽象工厂</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;OSFactory<br />
<img id="Codehighlighter1_569_704_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_569_704_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_569_704_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_569_704_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_569_704_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_569_704_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_569_704_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_569_704_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_569_704_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_569_704_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;创建按钮构件</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;Button&nbsp;CreateButton();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;创建文本框构件</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;Text&nbsp;CreateText();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;具体工厂1</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;UnixFactory&nbsp;:&nbsp;OSFactory<br />
<img id="Codehighlighter1_757_1023_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_757_1023_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_757_1023_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_757_1023_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_757_1023_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_757_1023_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_757_1023_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_757_1023_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_757_1023_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_757_1023_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;Button&nbsp;CreateButton()<br />
<img id="Codehighlighter1_813_891_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_813_891_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_813_891_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_813_891_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_813_891_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_813_891_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_813_891_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_813_891_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_813_891_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_813_891_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;返回Unix下的Button</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;UnixButton();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;Text&nbsp;CreateText()<br />
<img id="Codehighlighter1_943_1017_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_943_1017_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_943_1017_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_943_1017_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_943_1017_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_943_1017_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_943_1017_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_943_1017_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_943_1017_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_943_1017_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;返回Unix下的Text</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;UnixText();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;具体工厂2</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;WinFactory&nbsp;:&nbsp;OSFactory<br />
<img id="Codehighlighter1_1075_1345_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1075_1345_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1075_1345_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1075_1345_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1075_1345_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1075_1345_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1075_1345_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1075_1345_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1075_1345_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1075_1345_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;Button&nbsp;CreateButton()<br />
<img id="Codehighlighter1_1131_1211_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1131_1211_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1131_1211_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1131_1211_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1131_1211_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1131_1211_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1131_1211_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1131_1211_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1131_1211_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1131_1211_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;返回Windows下的Button</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;WinButton();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;Text&nbsp;CreateText()<br />
<img id="Codehighlighter1_1263_1339_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1263_1339_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1263_1339_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1263_1339_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1263_1339_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1263_1339_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1263_1339_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1263_1339_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1263_1339_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1263_1339_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;返回Winodws下的Text</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;WinText();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;抽象产品A</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Button<br />
<img id="Codehighlighter1_1390_1398_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1390_1398_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1390_1398_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1390_1398_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1390_1398_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1390_1398_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1390_1398_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1390_1398_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1390_1398_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1390_1398_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;抽象产品B</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Text<br />
<img id="Codehighlighter1_1441_1513_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1441_1513_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1441_1513_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1441_1513_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1441_1513_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1441_1513_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1441_1513_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1441_1513_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1441_1513_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1441_1513_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;交互关系</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Interact(Button&nbsp;b);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;具体产品A1</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;UnixButton&nbsp;:&nbsp;Button<br />
<img id="Codehighlighter1_1563_1571_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1563_1571_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1563_1571_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1563_1571_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1563_1571_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1563_1571_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1563_1571_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1563_1571_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1563_1571_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1563_1571_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;具体产品B1</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;UnixText&nbsp;:&nbsp;Text<br />
<img id="Codehighlighter1_1617_1804_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1617_1804_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1617_1804_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1617_1804_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1617_1804_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1617_1804_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1617_1804_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1617_1804_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1617_1804_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1617_1804_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Interact(Button&nbsp;b)<br />
<img id="Codehighlighter1_1676_1798_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1676_1798_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1676_1798_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1676_1798_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1676_1798_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1676_1798_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1676_1798_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1676_1798_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1676_1798_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1676_1798_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #0000ff">this</span><span style="color: #000000">.GetType().Name&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">&nbsp;interact&nbsp;with&nbsp;</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;b.GetType().Name);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;具体产品A2</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;WinButton&nbsp;:&nbsp;Button<br />
<img id="Codehighlighter1_1853_1861_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1853_1861_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1853_1861_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1853_1861_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1853_1861_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1853_1861_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1853_1861_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1853_1861_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1853_1861_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1853_1861_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;具体产品B2</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;WinText&nbsp;:&nbsp;Text<br />
<img id="Codehighlighter1_1906_2088_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1906_2088_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1906_2088_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1906_2088_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1906_2088_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1906_2088_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1906_2088_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1906_2088_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1906_2088_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1906_2088_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Interact(Button&nbsp;b)<br />
<img id="Codehighlighter1_1965_2082_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1965_2082_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1965_2082_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1965_2082_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1965_2082_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1965_2082_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1965_2082_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1965_2082_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1965_2082_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1965_2082_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #0000ff">this</span><span style="color: #000000">.GetType().Name&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">&nbsp;interact&nbsp;with&nbsp;</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;b.GetType().Name);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;客户端</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Client<br />
<img id="Codehighlighter1_2122_2451_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2122_2451_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_2122_2451_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_2122_2451_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_2122_2451_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2122_2451_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_2122_2451_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_2122_2451_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_2122_2451_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_2122_2451_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Button&nbsp;_button;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Text&nbsp;_text;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;通过构造器传入具体工厂</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Client(OSFactory&nbsp;factory)<br />
<img id="Codehighlighter1_2259_2360_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2259_2360_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_2259_2360_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_2259_2360_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_2259_2360_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2259_2360_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_2259_2360_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_2259_2360_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_2259_2360_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_2259_2360_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_button&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;factory.CreateButton();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_text&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;factory.CreateText();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Run()<br />
<img id="Codehighlighter1_2396_2445_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2396_2445_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_2396_2445_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_2396_2445_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_2396_2445_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2396_2445_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_2396_2445_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_2396_2445_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_2396_2445_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_2396_2445_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_text.Interact(_button);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></span></div>
<p style="font-size: 10pt" align="left">&nbsp;输出结果为：</p>
<p style="font-size: 10pt" align="left"><span style="color: red">UnixText interact with UnixButton<br />
</span><span style="color: #ff0000"><span style="color: #ff0000">WinText interact with WinButton</span></span></p>
<p style="font-size: 10pt" align="left"><span style="color: #ff0000"><span style="color: #ff0000"><span style="font-size: 12pt"><strong><span style="color: #000080"><span style="color: #000080">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;小结</span></span></strong></span></span></span></p>
<p style="font-size: 10pt" align="left"><span style="color: #ff0000"><span style="color: #ff0000"><font style="color: #000000" face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;抽象工厂模式是一个在实际项目中应用比较多的设计模式之一，抽象工厂模式面对的问题是多个产品等级结构的系统设计，运用抽象工厂模式的关键在于如果把创建产品的职责交给工厂去完成，希望大家在把握住工厂模式原型的基础上尽量的考虑到应用，形成一种思维上的定势。</font></span></span></p>
<p style="font-size: 10pt" align="left"><span style="color: #ff0000"><span style="color: #ff0000"><strong><font size="2"><strong><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong><font size="2"><span style="color: #000000"><strong><font style="color: #000000" size="2"><strong><font size="2">Welcome to share your idea,thank you!欢迎分享您的想法,谢谢!</font></strong></font></strong></span></font></strong></font></strong></font></strong></span></span></p>
<p style="font-size: 10pt" align="left"><span style="color: #ff0000"><span style="color: #ff0000"><strong><font size="2"><strong><font size="2"><strong><font size="2"><span style="color: #000000">&nbsp;</span></font></strong></font></strong><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.cnblogs.com/Thriving-Country/archive/2009/03/10/1407933.html">大家一起学面向对象设计模式系列 索引贴</a></p>
</span></font></strong></span></span>
 <img src="http://www.cnblogs.com/Thriving-Country/aggbug/1408032.html?type=1" width="1" height="1" alt=""/><p>评论: 8　<a href="http://www.cnblogs.com/Thriving-Country/archive/2009/03/16/1408032.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/Thriving-Country/archive/2009/03/16/1408032.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56819/" target="_blank">Yahoo脑震荡 关闭服务汇总贴</a><span style="color:gray">(2010-02-10 12:06)</span><br/>· <a href="http://news.cnblogs.com/n/56824/" target="_blank">2003年微软遭遇iTunes：我们彻底晕头转向了</a><span style="color:gray">(2010-02-10 12:06)</span><br/>· <a href="http://news.cnblogs.com/n/56823/" target="_blank">百度数据能被“作弊”软件篡改？百度:追究侵权</a><span style="color:gray">(2010-02-10 11:52)</span><br/>· <a href="http://news.cnblogs.com/n/56822/" target="_blank">Ksplice为Linux提供永远不用重启服务</a><span style="color:gray">(2010-02-10 11:51)</span><br/>· <a href="http://news.cnblogs.com/n/56821/" target="_blank">视频网站2010年格局之变：七成企业将被淘汰</a><span style="color:gray">(2010-02-10 11:48)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56812/" target="_blank">Google社会化产品Buzz发布会实录</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>大家一起学面向对象设计模式系列Chapter 02 软件设计的基本原则</title><link>http://www.cnblogs.com/Thriving-Country/archive/2009/03/13/1408030.html</link><dc:creator>GUO Xingwang</dc:creator><author>GUO Xingwang</author><pubDate>Fri, 13 Mar 2009 08:51:00 GMT</pubDate><guid>http://www.cnblogs.com/Thriving-Country/archive/2009/03/13/1408030.html</guid><description><![CDATA[<p>阅读: 1373 评论: 16 作者: <a href="http://www.cnblogs.com/Thriving-Country/" target="_blank">GUO Xingwang</a> 发表于 2009-03-13 16:51 <a href="http://www.cnblogs.com/Thriving-Country/archive/2009/03/13/1408030.html" target="_blank">原文链接</a></p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size: 10pt">我们为什么要使用设计模式呢？有人可能会说为了设计出"高内聚低耦合"的软件。"高内聚低耦合"的软件实际上也就是本文所说的具有可维护性和可复用性的软件。</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size: 10pt">这篇文章主要讲解两方面内容，这两方面是软件设计中很重要，也是很关键的内容，希望大家认真思考并深刻理解。第一部分就是关于软件的可维护性和可复用性的相关内容，第二部分就是在第一部分的基础上逐条讲解面向对象软件设计的基本原则，本文内容都是些很理论性的东西，这些理论是软件设计的基础。凡是有理论的地方，就有如何恰当的将理论应用到实践中去的问题，设计模式是对于学习OO设计原则的具体指导，也就是说设计模式就是将这些理论应用到实践的一种成熟的方式。</span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong style="font-size: 12pt; color: #000080">软件的可维护性和可复用性</strong></span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;首先来上一段大师所说的话，很经典。</span></p>
<p><span style="font-size: 10pt">&#8220;</span><span style="font-size: 10pt">通常认为，一个易于维护的系统，就是复用率较高的系统；而一个复用率较高的系统，就是一个易于维护的系统。但是实际上，可维护性和可复用性是两个独立的目标，就像两只奔跑的兔子一样，并不总是方向一致的。对于面向对象的软件系统设计来说，在支持可维护性（Maintainability）的同时，提高系统的可复用性（Reuseability）是一个核心的问题。&#8221;－－《Java与模式》阎宏博士</span></p>
<p><span style="font-size: 10pt"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 软件系统的可维护性：</strong></span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;软件维护就是软件的再生。一个好的软件设计，必须能够允许新的设计要求以比较容易和平稳的方式加入到已有的系统中去，从而使这个系统能够不断的的焕发出活力。一个可维护性较好的系统，应当允许维护工作能够以容易、准确、安全和经济的形式进行。</span></p>
<p><span style="font-size: 10pt">【导致可维护性较低的原因】</span></p>
<p><span style="font-size: 10pt">1、过于僵硬：在系统中加入一个新的功能，不管大小都很难，不仅意味着建造一个独立的新的模块，而且因为这个新功能会波及很多其他模块，最后成跨越几个模块的改动。<br />
2、过于脆弱：与软件的过于僵硬同时存在，是软件系统在修改已有代码时过于脆弱。对一个地方的修改，往往会导致看上去没有什么关系的另外一个地方发生故障。<br />
3、复用率低：所谓复用，就是指一个软件的组成部分，可以在同一个项目的不同地方甚至另一个项目中重复使用。复用率低，指当一段代码，函数，模块的功能可以在新的模块或新的系统使用，但是已有代码依赖于其他很多东西，很难分开。<br />
4、黏度过高：一个改动可以保存原始设计意图和原始设计框架的方式进行，也可以以破坏原始意图和框架进行。第一种方法对系统的未来有利，第二种办法是权宜之计，可以解决短期的问题，但是会牺牲中长期的利益。如果一个系统中使用第二种方法比使用第一种方法容易，那么就是黏度过高。</span></p>
<p><span style="font-size: 10pt">【设计的目标】</span></p>
<p><span style="font-size: 10pt">1、可扩展性：新的性能可以很容易地加入到系统中去，就是可扩展性。这就是系统&#8220;过于僵硬&#8221;的属性的方面。<br />
2、灵活性：可以允许代码修改平稳地发生，而不会波及到很多其他的模块，这就是灵活性。灵活性其实就是&#8220;过于脆弱&#8221;的属性的方面。<br />
3、可插入性：可以很容易地将一个类抽出去，同时将另外一个有同样接口的类加入进来，这就是可插入性。其实，这就是&#8220;黏度过高&#8221;的方面。</span></p>
<p><span style="font-size: 10pt"><font face="Verdana"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 软件系统的可复用性：</strong></font></span></p>
<p><span style="font-size: 10pt">【软件复用的好处】</span></p>
<p><span style="font-size: 10pt">1、较高的生产效率；<br />
2、较高的软件质量；<br />
3、恰当使用复用可以改善系统的可维护性。</span></p>
<p><span style="font-size: 10pt">【传统的复用形式】</span></p>
<p><span style="font-size: 10pt">1、代码的剪贴复用；<br />
2、算法的复用；<br />
3、数据结构的复用。</span></p>
<p><span style="font-size: 10pt">【面向对象设计的复用】</span></p>
<p><span style="font-size: 10pt">在面向对象语言中，数据的抽象化，继承，封装和多态性使得一个系统可以在更高层次上提供可复用性。数据的抽象化和继承关系使得概念和定义可以复用；多态性使得实现和应用得到复用；而抽象化和封装可以保持和促进系统的可维护性，复用的重点转移到含有宏观商业逻辑的抽象层次上。在面向对象的设计里面，可维护性复用是以设计原则和设计模式为基础的。</span></p>
<p><span style="font-size: 10pt"><strong><span style="color: #000080"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;提高系统可维护性和可复用性的设计原则</span></span></strong></span></p>
<p><span style="font-size: 10pt"><strong>1、&#8220;开－闭&#8221;原则(Open-Closed Principle，或者OCP)；</strong></span></p>
<p><span style="font-size: 10pt">一个软件实体应该对扩展开放，对修改关闭；</span></p>
<p><span style="font-size: 10pt"><font face="Verdana">在设计一个模块的时候，应当使这个模块可以在不被修改的前提下被扩展。换言之，应当可以在不必修改源代码的情况下改变这个模块的行为。这个原则实际上是对&#8220;对可变性的封闭原则&#8220;：找到一个系统的可变因素，将之封装起来。这个原则意昧着两点：<br />
1) 一个可变性不应当散落在代码的很多角落里，而应当被封装到一个对象里面。同一种可变性的不同表象意昧着同一个继承等级结构中的具体子类。<br />
继承就当被看作是封装变化的方法，而不应当被认为是从一般的对象生成特殊对象的方法。<br />
2) 一种可变性不应当与另一种可变性混合在一起。（所有类图的继承结构一般不会超过两层，不然就意昧着将两种不同的可变性混合在了一起。）</font></span></p>
<p><span style="font-size: 10pt">这个原则是总的原则，其它几条是这个原则的手段和工具。</span></p>
<span style="font-size: 10pt">
<p><br />
<strong>2、里氏替代原则(Liskov Substitution Principle，或者LSP)；</strong></p>
<p><strong></strong>如果对于每一个类型为T1的对象o1，都有类型为T2的对象o2，使得以T1定义的所有程序P在所有的对象o1都代换成o2时，程序P的行为没有变化，那么类型T2是类型T1的子类型。</p>
<p>换言之，一个软件实体如果使用的是一个基类的话，那么一定适用于其子类，而且它根本不能察觉出基类对象和子类对象的区别。</p>
<p>反过来代换不成立。</p>
<p><br />
<strong>3、依赖倒转原则(Dependency Inversion Principle，或者DIP)；</strong></p>
<p><strong></strong>要依赖于抽象，不要依赖于具体。</p>
<p>开闭原则是目标，而达到这一目标的手段是依赖倒转原则。</p>
<p>抽象层次包含的是应用系统的商务逻辑和宏观的、对整个系统来说重要的战略性决定，是必然性的体现，那么抽象层次就应当是较为稳定的，应当是复用的重点；也应当是维护的重点；而具体层次则含有一些次要的与实现有关的算法和逻辑，以及战术性的决定，带有相当大的偶然性选择。具体层次的代码是会经常有变动的，不能避免出现错误。</p>
<p><strong>4、接口隔离原则(Interface Segregation Principle，或者ISP)；</strong></p>
<p>使用多个专门的接口比使用单一的总接口要好。</p>
<p>换言之，从一个客户类的角度讲：一个类对另一个类的依赖性应当是建立在最小的接口上的。</p>
<p>接口隔离原则与迪米特法则（下面讲到）都是对一个软件实体与其他的软件实体的通信限制。迪米特原则要求尽可能地限制通信的宽度和深度，接品隔离原则要求通信的宽度尽可能地窄。这样做的结果使一个软件系统在功能扩展过程当中，不会将修改的压力传递到其他对象。</p>
<p>一个接口相当于剧本中的一种角色，而此角色在一个舞台上由哪一个演员来演则相当于接口的实现。因此，一个接口应当简单地代表一个角色，而不是多个角色。如果系统涉及到多个角色的话，那么每一个角色都应当由一个特定的接口代表。</p>
<p><strong>5、组合/聚合复用原则(Composition/Aggregation Principle，或者CARP)；</strong></p>
<p>组合/聚合原则就是在一个新的对象里面使用一些已有的对象，使之成为新对象的一部分；新的对象通过向这些对象的委派达到得复用已有功能的目的。</p>
<p>要尽量使用组合/聚合，尽量不要使用继承。</p>
<p><strong>6、迪米特法则(Law of Demeter，或者LoD)；</strong></p>
<p></span><span style="font-size: 10pt">一个软件实体应当尽可能少的与其他实体发生相互作用。模块之间的交互要少。这样做的结果是当系统的功能需要扩展时，会相对更容易地做到对修改的关闭。</span></p>
<p><span style="font-size: 10pt">一个对象应当对其他对象有尽可能少的了解。</span></p>
<p><span style="font-size: 10pt"><strong>7、<font size="2">单一职责原则</font>（Single Responsibility Principle，或者SRP）</strong></span></p>
<p><span style="font-size: 10pt">在设计中为每种职责设计一个类，彼此保持正交，互不干涉。这个原则比较容易理解，这里不在多说。</span></p>
<p><span style="font-size: 10pt"><strong><span style="color: #000080"><span style="color: #000080"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;小结</span></span></span></strong></span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当我们掌握了C#的语法，当我们了解了面向对象的封装、继承、多态等特性，当我们可以用各种框架与技术构建桌面以及Web应用时，这并不意味着我们可以写出面向对象的程序，不意味着我们可以很好的实现代码复用，弹性维护，不意味着我们可以实现在维护、扩展基础上的代码复用。使用面向对象语言开发的程序不一定是面向对象的，使用面向过程的语言开发的程序也不一定不是面向对象的。要想开发出一个具有<font size="2">可维护性</font>和可复用性的软件系统，那是需要优秀的设计和长时间的运行才能完成的，其实我们可以观察一下，任何一个优秀的软件产品都是经过长时间的设计，运行，维护，修改等最后才成为成功的产品，版本上也在不断的更新。衡量一个<font size="2">软件开发者</font>是不是一个好的软件开发者，不是看他是否实现了软件的必要功能，而是要看你的软件在满足功能需求的情况下是否做到了复用性和可扩展性，这对于一个大型系统尤其重要。我们不要静止的看待一个软件，而一定要把软件过程放在时间轴上来观察与设计它，只有放在时间轴上经得住考验的软件系统才是成功的。软件的复用性和可扩展性对于大型系统是必要的，我们在设计自己的软件系统时，甚至在编写代码时更需要考虑一下这样做是否遵循了系统设计的原则，是否有利于系统的可维护性和可复用性，是否达到了常说的&#8220;高内聚低耦合&#8221;呢？设计模式正是解决这一问题的王道。</span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;从下文开始我们将<font size="2">结合实例</font>对于GoF23种设计模式进行一一讲解。</span></p>
<p><span style="font-size: 10pt"><strong><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Welcome to share your idea,thank you!欢迎分享您的想法,谢谢!</font></strong> </p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.cnblogs.com/Thriving-Country/archive/2009/03/10/1407933.html">大家一起学面向对象设计模式系列 索引贴</a></p>
</span></span>
 <img src="http://www.cnblogs.com/Thriving-Country/aggbug/1408030.html?type=1" width="1" height="1" alt=""/><p>评论: 16　<a href="http://www.cnblogs.com/Thriving-Country/archive/2009/03/13/1408030.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/Thriving-Country/archive/2009/03/13/1408030.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56819/" target="_blank">Yahoo脑震荡 关闭服务汇总贴</a><span style="color:gray">(2010-02-10 12:06)</span><br/>· <a href="http://news.cnblogs.com/n/56824/" target="_blank">2003年微软遭遇iTunes：我们彻底晕头转向了</a><span style="color:gray">(2010-02-10 12:06)</span><br/>· <a href="http://news.cnblogs.com/n/56823/" target="_blank">百度数据能被“作弊”软件篡改？百度:追究侵权</a><span style="color:gray">(2010-02-10 11:52)</span><br/>· <a href="http://news.cnblogs.com/n/56822/" target="_blank">Ksplice为Linux提供永远不用重启服务</a><span style="color:gray">(2010-02-10 11:51)</span><br/>· <a href="http://news.cnblogs.com/n/56821/" target="_blank">视频网站2010年格局之变：七成企业将被淘汰</a><span style="color:gray">(2010-02-10 11:48)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56812/" target="_blank">Google社会化产品Buzz发布会实录</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>大家一起学面向对象设计模式系列Chapter 01 本系列介绍</title><link>http://www.cnblogs.com/Thriving-Country/archive/2009/03/13/1408028.html</link><dc:creator>GUO Xingwang</dc:creator><author>GUO Xingwang</author><pubDate>Fri, 13 Mar 2009 02:43:00 GMT</pubDate><guid>http://www.cnblogs.com/Thriving-Country/archive/2009/03/13/1408028.html</guid><description><![CDATA[<p>阅读: 1577 评论: 8 作者: <a href="http://www.cnblogs.com/Thriving-Country/" target="_blank">GUO Xingwang</a> 发表于 2009-03-13 10:43 <a href="http://www.cnblogs.com/Thriving-Country/archive/2009/03/13/1408028.html" target="_blank">原文链接</a></p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size: 10pt">大家好，几个月后我又开始写文章了，上一关于BlogEngine.Net的系列得到很多园友的支持,让我体会到了分享的快乐。这是我的新系列，主要是讲解GOF23种设计模式的文章。其实，这是一个被讲得很多的一个话题，博客园中关于设计模式的文章太多了，例如TerryLee的.NET设计模式系列等。不过好的东西不怕被讲烂，可能讲法不一样给大家带来的收获也不一样，对于我来说，其实基本上博客园中任何一篇文章都可以给我带来新的收获。</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size: 10pt">我的这个系列对于那些大拿们可能觉得很无趣，但是对于一些刚刚接触设计模式，刚刚接触软件开发的新手们还是很有用的。设计模式是软件设计中很核心的知识，我刚开始接触时并没感到它到底牛在哪，时间久了就会发现它给你带来的震撼要比一般的技术多得多，经过再三思索，我决定本年度还是要把设计模式好好研究一下。</span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong style="font-size: 12pt"><span style="color: #000080"><span style="font-size: 10pt"><strong style="font-size: 12pt; color: #000080">为什么写这个系列</strong></span></span></strong></span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;干一件事总要有个目的吧！写文章也是，绝对不是三分钟热血，我写这个系列需要花费我很多的时间，总结起来目的有三：</span></p>
<p><span style="font-size: 10pt">1、主要想系统的学习一下设计模式（这里所说的设计模式特指面向对象的设计模式,下文类同）。要想灵活的应用设计模式，首先还是要深深的理解每种模式的原型，优缺点，适用的场景...，这样才能运用灵活。也就是说要想用好，就必须要学好（符合人类的认识世界和改造世界）。经过长久的设计与开发，我觉得设计模式是必须要掌握的，这才下定决心把它学好，掌握好，当然这里不是说要想掌握设计模式仅仅靠写几篇文章就可以实现的，文章也就是一个抛砖引玉的作用，更多系统的挖掘可能需要自己的领悟与实践。在这一系列中我会尽我最大的努力把每一种模式都写好，所以时间上可能不能一鼓作气。</span></p>
<p><span style="font-size: 10pt">2、分享给需要学习设计模式的园友们。如果你已经看了很多设计模式的文章，我相信你也会从这个系列中得到一定的收获。我这一系列主要是写给那些在设计模式门口徘徊的初学者的。尽量做到容易理解，讲解全面。</span></p>
<p><span style="font-size: 10pt">3、作为本人知识的积累，留在博客园中，我写的文章在我的电脑上其实没有做任何备份，我相信博客园可以永存。此外，这可能是我2009年唯一的一个系列。</span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size: 12pt; color: #000080"><strong>几个基本概念的区分</strong></span></span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>模式</strong>:</span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;模式，即Pattern。其实就是解决某一类问题的方法论。把解决某类问题的方法总结归纳到理论高度，那就是模式。Alexander给出的经典定义是：每个模式都描述了一个在我们的环境中不断出现的问题，然后描述了该问题的解决方案的核心。通过这种方式，你可以无数次地使用那些已有的解决方案，无需再重复相同的工作。模式有不同的领域，建筑领域有建筑模式，软件设计领域也有设计模式。当一个领域逐渐成熟的时候，自然会出现很多模式。</span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>设计模式和面向对象的设计模式:</strong></span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设计模式（Design pattern）是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式最初来源于建筑学。GOF（&#8220;四人帮&#8221;，指Gamma, Helm, Johnson &amp; Vlissides, Addison-Wesley四人）的《设计模式》（1995年出版）是第一次将设计模式提升到理论高度，并将之规范化，本系列文章主要就是讲解这23种经典的设计模式。</span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;面向对象设计的模式，顾名思义，就是在面向对象分析与设计中使用的设计模式，GOF23种设计模式同时也是面向对象的设计模式，本文不做区分。良好的设计模式运用可以实现软件设计的&#8220;高内聚、低耦合&#8221;，提高软件的复用性和可扩展性。</span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>框架:</strong></span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;框架，即Framework。其实就是某种应用的半成品，就是一组组件，供你选用完成你自己的系统。简单说就是使用别人搭好的舞台，你来做表演。而且，框架一般是成熟的，不断升级的软件。框架一般处在低层应用平台（如J2EE）和高层业务逻辑之间的中间层。</span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>架构：</strong></span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;架构（Architecture）是一系列相关的抽象模式，用于指导大型软件系统各个方面的设计。架构是一个系统的草图。架构描述的对象是直接构成系统的抽象组件。各个组件之间的连接则明确和相对细致地描述组件之间的通讯。在实现阶段，这些抽象组件被细化为实际的组件，比如具体某个类或者对象。在面向对象领域中，组件之间的连接通常用接口来实现。</span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一些刚入门的程序员经常会混淆&#8220;框架&#8221;和&#8220;架构&#8221;这两个名词，这里做了一下解释。</span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size: 12pt"><strong style="color: #000080">文章如何组织</strong></span></span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这个系列文章首先从面向对象软件设计的基本原则出发，然后对GOF23种设计模式进行一一讲解（讲解过程中先讲解模式原型，常见变型，典型应用和模式分析，最后小结），在讲解的过程中可能会从某个有名的开源项目中抽取出采用相应模式的源代码讲解，以了解模式在实际项目中的运用。最后做一个大的总结。在对每一种模式讲解的文章中可能会与其它模式进行对比。</span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;整个系列文章将采用C#代码作为演示，IDE采用vs2005或vs2008。此外阅读本系列文章需要对UML有少许了解。</span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong style="font-size: 12pt; color: #000080">系列文章的主要参考文献</strong></span></p>
<p><span style="font-size: 10pt">&nbsp;1、http://www.dofactory.com<br />
&nbsp;2、博客园中相关文章.<br />
&nbsp;3、《Java与模式》阎宏博士.<br />
&nbsp;4、《设计模式》 GOF.<br />
&nbsp;5、李建忠老师的Webcast视频课程.</span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>Welcome to share your idea,thank you!欢迎分享您的想法,谢谢!</strong></span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.cnblogs.com/Thriving-Country/archive/2009/03/10/1407933.html">大家一起学面向对象设计模式系列 索引贴</a></p>
</span>
<img src="http://www.cnblogs.com/Thriving-Country/aggbug/1408028.html?type=1" width="1" height="1" alt=""/><p>评论: 8　<a href="http://www.cnblogs.com/Thriving-Country/archive/2009/03/13/1408028.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/Thriving-Country/archive/2009/03/13/1408028.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56819/" target="_blank">Yahoo脑震荡 关闭服务汇总贴</a><span style="color:gray">(2010-02-10 12:06)</span><br/>· <a href="http://news.cnblogs.com/n/56824/" target="_blank">2003年微软遭遇iTunes：我们彻底晕头转向了</a><span style="color:gray">(2010-02-10 12:06)</span><br/>· <a href="http://news.cnblogs.com/n/56823/" target="_blank">百度数据能被“作弊”软件篡改？百度:追究侵权</a><span style="color:gray">(2010-02-10 11:52)</span><br/>· <a href="http://news.cnblogs.com/n/56822/" target="_blank">Ksplice为Linux提供永远不用重启服务</a><span style="color:gray">(2010-02-10 11:51)</span><br/>· <a href="http://news.cnblogs.com/n/56821/" target="_blank">视频网站2010年格局之变：七成企业将被淘汰</a><span style="color:gray">(2010-02-10 11:48)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56812/" target="_blank">Google社会化产品Buzz发布会实录</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>大家一起学面向对象设计模式系列 索引贴</title><link>http://www.cnblogs.com/Thriving-Country/archive/2009/03/13/1407933.html</link><dc:creator>GUO Xingwang</dc:creator><author>GUO Xingwang</author><pubDate>Fri, 13 Mar 2009 02:42:00 GMT</pubDate><guid>http://www.cnblogs.com/Thriving-Country/archive/2009/03/13/1407933.html</guid><description><![CDATA[<p>阅读: 1758 评论: 16 作者: <a href="http://www.cnblogs.com/Thriving-Country/" target="_blank">GUO Xingwang</a> 发表于 2009-03-13 10:42 <a href="http://www.cnblogs.com/Thriving-Country/archive/2009/03/13/1407933.html" target="_blank">原文链接</a></p><p><font style="font-size: 10pt" face="Verdana"></font>&nbsp;</p>
<h3>大家一起学面向对象设计模式系列目录(更新中)</h3>
<font style="font-size: 10pt" face="Verdana">
<p><br />
<strong>【PartⅠ】：开篇</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Chapter 01&nbsp;<a href="http://www.cnblogs.com/Thriving-Country/archive/2009/03/10/1408028.html">本系列介绍<br />
</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Chapter 02 <a href="http://www.cnblogs.com/Thriving-Country/archive/2009/03/10/1408030.html">软件设计的基本原则</a></p>
<p><br />
<strong>【PartⅡ】：创建型模式(Creational Patterns)<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Chapter 03&nbsp;<a href="http://www.cnblogs.com/Thriving-Country/archive/2009/03/16/1408032.html">抽象工厂(Abstract Factory)</a><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Chapter 04&nbsp;<a href="http://www.cnblogs.com/Thriving-Country/archive/2009/03/10/1408036.html">建造者(Builder)</a><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Chapter 05 工厂方法(Factory Method)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Chapter 06 原型(Prototype)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Chapter 07 单子(Singleton)</p>
<p><br />
<strong>【PartⅢ】：结构型模式(Structural Patterns)</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Chapter 08 适配器(Adapter)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Chapter 09 桥接(Bridge)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Chapter 10 组合(Composite)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Chapter 11 装饰者(Decorator)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Chapter 12 外观(Facade)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Chapter 13 享元(Flyweight)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Chapter 14 代理(Proxy)</p>
<p><br />
<strong>【PartⅣ】：行为型模式(Behavioral Patterns)<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Chapter 15 责任链(Chain of Responsibility)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Chapter 16 命令(Command)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Chapter 17 解释器(Interpreter)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Chapter 18 迭代器(Iterator)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Chapter 19 中介者(Mediator)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Chapter 20 备忘录(Memento)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Chapter 21 观察者(Observer)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Chapter 22 状态(State)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Chapter 23 策略(Strategy)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Chapter 24 模板方法(Template Method)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Chapter 25 访问者(Visitor)</p>
<p><br />
<strong>【PartⅤ】：总结与附录<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Chapter 26 本系列总结<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Chapter 27&nbsp;<a href="http://www.cnblogs.com/Thriving-Country/archive/2009/03/10/1408100.htm">附录－－61条面向对象设计的经验原则</a></font>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Welcome to share your idea,thank you!欢迎分享您的想法,谢谢!</strong></p>
<p>&nbsp;</p>
<img src="http://www.cnblogs.com/Thriving-Country/aggbug/1407933.html?type=1" width="1" height="1" alt=""/><p>评论: 16　<a href="http://www.cnblogs.com/Thriving-Country/archive/2009/03/13/1407933.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/Thriving-Country/archive/2009/03/13/1407933.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56819/" target="_blank">Yahoo脑震荡 关闭服务汇总贴</a><span style="color:gray">(2010-02-10 12:06)</span><br/>· <a href="http://news.cnblogs.com/n/56824/" target="_blank">2003年微软遭遇iTunes：我们彻底晕头转向了</a><span style="color:gray">(2010-02-10 12:06)</span><br/>· <a href="http://news.cnblogs.com/n/56823/" target="_blank">百度数据能被“作弊”软件篡改？百度:追究侵权</a><span style="color:gray">(2010-02-10 11:52)</span><br/>· <a href="http://news.cnblogs.com/n/56822/" target="_blank">Ksplice为Linux提供永远不用重启服务</a><span style="color:gray">(2010-02-10 11:51)</span><br/>· <a href="http://news.cnblogs.com/n/56821/" target="_blank">视频网站2010年格局之变：七成企业将被淘汰</a><span style="color:gray">(2010-02-10 11:48)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56812/" target="_blank">Google社会化产品Buzz发布会实录</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>对于技术 方法 生活等问题的思考</title><link>http://www.cnblogs.com/Thriving-Country/archive/2009/03/10/1407645.html</link><dc:creator>GUO Xingwang</dc:creator><author>GUO Xingwang</author><pubDate>Tue, 10 Mar 2009 03:08:00 GMT</pubDate><guid>http://www.cnblogs.com/Thriving-Country/archive/2009/03/10/1407645.html</guid><description><![CDATA[<p>阅读: 1863 评论: 25 作者: <a href="http://www.cnblogs.com/Thriving-Country/" target="_blank">GUO Xingwang</a> 发表于 2009-03-10 11:08 <a href="http://www.cnblogs.com/Thriving-Country/archive/2009/03/10/1407645.html" target="_blank">原文链接</a></p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size: 10pt">我写这篇是由于看了小羊的<a href="http://www.cnblogs.com/yanyangtian/archive/2009/03/09/1406897.html" target="_blank">"对技术的掌握到底应该有多深？"</a>以及下面园友的评论加上自己对这一问题也有一定的看法,想表达出来与大家分享一下,同时也作为自己认识的一个记载.写的可能有些语无伦次,希望大家理解,有什么自己的想法大家可以评论.</span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>技术篇</strong></span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我基本赞同小羊对于"精通"二字的理解,实际上我也是这样理解它的.当你做了一年的时,你可能觉得自己做得已经很好了,觉得ASP.NET也就是那么回事,当你做了两年时你会发现不会的东西越来越多,当你做了n久以后你会发现几年前做的东西太烂了,为那时觉得自己很牛而感到可笑.那么什么才算"精通"呢?这个问题每个人理解得不太一样.我觉得"精通"有时还是可以写在简历上的,即使自己认为自己真的没有达到精通的地步,因为简历是写给别人看的,你要充分表达出你的长处,让别人了解你所擅长的技术,如果以为自己很谦虚而没有在自己的简历上写"精通"二字的话,而看简历的人不是真正的技术出身(或者做的技术不是很久或者不是很牛),那么你的简历很有可能直接的被pass掉(除非你遇到了传说中的伯乐,直接看出你得简历写很谦虚,认为你深藏不露).我有一次被面试的经历:去年去一家小公司面试,那个面试的人一直问我是否对ASP.NET已经很精通了(他们要的可能是比较高级一点的程序员),而我简历上确实没有写"精通"二字,于是我只好和他解释说"精通这个词我们理解的可能不太一样",其实一个程序员的素质也不是几个面试题就可以考验出来的(面试题网上多的很),于是以后我就直接在简历上也写上了"精通"二字,实际上我到底是什么水平只有我自己知道.在面试中就是尽可能的展现自己的长处,实际上"精通"二字已经被滥用了.大家可以使用,但是最好不要动不动就用,也要把握好一个度的问题.</span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>方法篇</strong></span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一个优秀的程序员是很值得我们去追求的.对于技术知识的把握我们也需要按需所取,计算机以及相关领域的技术太多了,我们只要擅长自己所需要的技术就行了,对其它一些技术是要大概了解一下,需要时再去学习.在四年大学生活和两年的工作中我懂得了比学习知识更重要的是培养自己分析问题和解决问题的能力(人类就是在不断的通过使用工具来认识世界和改造世界),培养自己的兴趣和爱好,这些东西要胜过知识本身.所以我们在学习技术时不仅要知道How,更要知道What和Why.这几年我一直在做.NET平台上的研究与开发,最近几天有空研究了一下Java方面的东西,在看一些资料时有一种非常亲切的感觉,好多东西基本差不多,包括实现的思想等,可能这就是学习的能力带给我们的好处吧.相反,就在前几天看到一个很基础的面试题时,我也有一种很熟悉但是就是不能准确的回答正确的感觉,实际上已经由于总也不用给忘了(有点类似于记忆性的题目).知识可能随着时间的推移而被慢慢的淡忘,而能力确永远属于自己.</span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>生活篇</strong></span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在小羊的"对技术的掌握到底应该有多深？"的评论中,有一个未注册网友的评论我觉得很经典,他是这样说的"技术当然越精通越好，但人的精力是有限的，工作的分工是变化的，如果你有时间你可以学得更多，但同时你也需要一定的生活享受，爱情、婚姻、家庭以及对社会的参与，你把大多精力放到学习上也不一定表示你多伟大，也许这样之后你成了一个技术大牛，有一定的价值感，但同时你也许就成为一个不合格的男友（或女友）、不合格的丈夫（或妻子）、不合格的儿子（或女儿）等等，所以兄弟姐妹们，除了这个物质不是很丰富的社会需要我们努力学习技术，同时我们更应该学会平衡一些东西，学会学习学会生活，如果说硬要说技术需要掌握多深，我的答案是----在你的追求环境和现实环境中，够用就行！（因为你还需要其他的东西）".写的很好,这和我想的一样,但是我就表达不出来,人生短暂,我们不能每天都为了自己的工作,为了自己的发展而放弃对其他方面的追求,"机会成本"这个词语大家都很清楚,我也经常和女朋友讲这方面的东西.你得到了这个东西,同时也就放弃了另一个东西.除了去专研技术,攻克技术难题的工作上的事情外,还有很多事情我们可以做,也等着我们去做好(无论你是否愿意).人的成功是多方面的成功,这样你才会成为大家的楷模,成为别人的偶像(例如菲尔普斯吸食大麻被禁止,因为他已经成为了很多人的偶像,不良的做法会影响到很多人,同时他也不是成功的人.还有很多影视明星等,以前我只觉得他们电影等演的好就行了,但是现在我也不那么认为了,我也很少关注他们了).我认识一个哥们也是做我们这行的,他就特别忙,他本身也特喜欢工作,每天工作从8:30一直到晚上11:00才睡觉,除了吃饭的时间基本都在工作,周末一般也会加一天的班,事业上可能比较成功,去年他有个女朋友也是由于时间问题和他分手了,我也曾经给过他一些这方面的建议.生命真的很短暂"眼睛一闭一睁一天过去了,眼睛一闭不睁一辈子过去了",我们需要让生命更加多彩.这些需要我们自己把握.</span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>总结</strong></span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;人的生活是一个过程,不是一个结果(最终结果就是死亡,你的名字可能会流芳百世,但是迟早会被人们所遗忘).如果有人让我现在立即就成为比尔盖茨,我可能不会接受,我希望经过自己努力去实现,因为我需要体会这个过程.也就是体味人生.</span></p>
 <img src="http://www.cnblogs.com/Thriving-Country/aggbug/1407645.html?type=1" width="1" height="1" alt=""/><p>评论: 25　<a href="http://www.cnblogs.com/Thriving-Country/archive/2009/03/10/1407645.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/Thriving-Country/archive/2009/03/10/1407645.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56819/" target="_blank">Yahoo脑震荡 关闭服务汇总贴</a><span style="color:gray">(2010-02-10 12:06)</span><br/>· <a href="http://news.cnblogs.com/n/56824/" target="_blank">2003年微软遭遇iTunes：我们彻底晕头转向了</a><span style="color:gray">(2010-02-10 12:06)</span><br/>· <a href="http://news.cnblogs.com/n/56823/" target="_blank">百度数据能被“作弊”软件篡改？百度:追究侵权</a><span style="color:gray">(2010-02-10 11:52)</span><br/>· <a href="http://news.cnblogs.com/n/56822/" target="_blank">Ksplice为Linux提供永远不用重启服务</a><span style="color:gray">(2010-02-10 11:51)</span><br/>· <a href="http://news.cnblogs.com/n/56821/" target="_blank">视频网站2010年格局之变：七成企业将被淘汰</a><span style="color:gray">(2010-02-10 11:48)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56812/" target="_blank">Google社会化产品Buzz发布会实录</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item></channel></rss>