<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8">
<meta name="generator" content="pdf2htmlEX">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<link rel="stylesheet" href="https://static.pudn.com/base/css/base.min.css">
<link rel="stylesheet" href="https://static.pudn.com/base/css/fancy.min.css">
<link rel="stylesheet" href="https://static.pudn.com/prod/directory_preview_static/6251624074bc5c01059b28b6/raw.css">
<script src="https://static.pudn.com/base/js/compatibility.min.js"></script>
<script src="https://static.pudn.com/base/js/pdf2htmlEX.min.js"></script>
<script>
try{
pdf2htmlEX.defaultViewer = new pdf2htmlEX.Viewer({});
}catch(e){}
</script>
<title></title>
</head>
<body>
<div id="sidebar" style="display: none">
<div id="outline">
</div>
</div>
<div id="pf1" class="pf w0 h0" data-page-no="1"><div class="pc pc1 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://static.pudn.com/prod/directory_preview_static/6251624074bc5c01059b28b6/bg1.jpg"><div class="t m0 x1 h2 y1 ff1 fs0 fc0 sc0 ls0 ws0">设计模式精解-<span class="ff2 ls1 ws1">GoF 23<span class="_"> </span></span>种设计模式解析附<span class="_ _0"> </span><span class="ff2 ls2">C++</span>实现源码<span class="ff2 ls3"> <span class="ff3 fc1 ls4">http://www<span class="_ _1"></span>.mscenter<span class="_ _2"></span>.edu.cn/blog/k_eckel<span class="ff2 fc0 ls5"> </span></span></span></div><div class="t m1 x2 h3 y2 ff4 fs1 fc0 sc0 ls5 ws0"> </div><div class="t m1 x3 h3 y3 ff1 fs1 fc0 sc1 ls6 ws0">设计模式精解-<span class="ff4 sc0 ls7 ws2">GoF<span class="_ _1"></span> 23<span class="_"> </span><span class="ff1 sc1 ls8 ws0">种设计模式解析附<span class="_ _3"> </span></span><span class="ls9 ws0">C++<span class="ff1 sc1 ls6">实现源码</span><span class="ls5"> </span></span></span></div><div class="t m2 x1 h4 y4 ff2 fs2 fc0 sc0 ls5 ws0"> </div><div class="t m1 x4 h3 y5 ff1 fs1 fc0 sc1 ls5 ws0">目<span class="ff4 sc0 lsa"> </span>录<span class="ff4 sc0"> </span></div><div class="t m1 x2 h3 y6 ff4 fs1 fc0 sc0 ls5 ws0"> </div><div class="t m2 x1 h4 y7 ff2 fs2 fc0 sc0 lsb ws0">0 <span class="_"> </span><span class="ff1 lsc">引言<span class="_ _0"> </span></span><span class="lsd">...............................................................................................................................<span class="_ _4"></span><span class="lse">...............<span class="_ _5"></span>2 </span></span></div><div class="t m2 x5 h4 y8 ff2 fs2 fc0 sc0 lsb ws0">0.1<span class="_"> </span><span class="ff1 lsc">设计模式解析(总序)<span class="_ _4"></span></span><span class="lsd">.....................................................................................................<span class="_ _5"></span>2 </span></div><div class="t m2 x5 h4 y9 ff2 fs2 fc0 sc0 lsb ws0">0.2<span class="_"> </span><span class="ff1 lsc">设计模式解析后记<span class="_ _4"></span></span><span class="lsd">.............................................................................................................<span class="_ _5"></span>2 </span></div><div class="t m2 x5 h4 ya ff2 fs2 fc0 sc0 lsf ws0">0.3 <span class="_"> </span><span class="ff1 lsc">与作者联系</span><span class="lsd">........................................................................................................................<span class="_ _5"></span>5 </span></div><div class="t m2 x1 h4 yb ff2 fs2 fc0 sc0 lsb ws0">1 <span class="_"> </span><span class="ff1 lsc">创建型模式</span><span class="lsd">...............................................................................................................................<span class="ls10">....<span class="_ _5"></span>5 </span></span></div><div class="t m2 x5 h4 yc ff2 fs2 fc0 sc0 ls11 ws3">1.1 Factory<span class="ff1 lsc ws0">模式<span class="_ _0"> </span><span class="ff2 lsd">........................................................................................................................<span class="_ _4"></span>5 </span></span></div><div class="t m2 x5 h4 yd ff2 fs2 fc0 sc0 ls12 ws4">1.2 AbstactFactory<span class="ff1 lsc ws0">模式<span class="_ _0"> </span><span class="ff2 lsd">..........................................................................................................<span class="_ _6"></span>1<span class="_ _2"></span>1 </span></span></div><div class="t m2 x5 h4 ye ff2 fs2 fc0 sc0 ls13 ws5">1.3 Singleton<span class="ff1 lsc ws0">模式<span class="_ _0"> </span><span class="ff2 lsd">...................................................................................................................<span class="_ _4"></span>16 </span></span></div><div class="t m2 x5 h4 yf ff2 fs2 fc0 sc0 ls14 ws6">1.4 Builder<span class="ff1 ls15 ws0">模式<span class="ff2 lsd">.......................................................................................................................<span class="_ _5"></span>18 </span></span></div><div class="t m2 x5 h4 y10 ff2 fs2 fc0 sc0 ls16 ws7">1.5 Prototype<span class="ff1 lsc ws0">模式<span class="_ _7"> </span><span class="ff2 lsd">...................................................................................................................<span class="_ _4"></span>23 </span></span></div><div class="t m2 x1 h4 y11 ff2 fs2 fc0 sc0 lsb ws0">2 <span class="_"> </span><span class="ff1 lsc">结构型模式</span><span class="lsd">...............................................................................................................................<span class="ls17">..<span class="_ _5"></span>26 </span></span></div><div class="t m2 x5 h4 y12 ff2 fs2 fc0 sc0 ls10 ws8">2.1 Bridge<span class="ff1 ls15 ws0">模式<span class="_ _4"></span><span class="ff2 lsd">........................................................................................................................<span class="_ _5"></span>26 </span></span></div><div class="t m2 x5 h4 y13 ff2 fs2 fc0 sc0 lsd ws9">2.2 Adapter<span class="ff1 ls15 ws0">模式<span class="_ _6"></span></span><span class="ws0">......................................................................................................................<span class="_ _5"></span>31 </span></div><div class="t m2 x5 h4 y14 ff2 fs2 fc0 sc0 ls18 wsa">2.3 Decorator<span class="ff1 lsc ws0">模式<span class="_ _4"></span><span class="ff2 lsd">...................................................................................................................<span class="_ _4"></span>35 </span></span></div><div class="t m2 x5 h4 y15 ff2 fs2 fc0 sc0 ls14 ws6">2.4 Composite<span class="_ _2"></span><span class="ff1 lsc ws0">模式<span class="_ _0"> </span><span class="ff2 lsd">.................................................................................................................<span class="_ _4"></span>40 </span></span></div><div class="t m2 x5 h4 y16 ff2 fs2 fc0 sc0 ls19 wsb">2.5 Flyweight<span class="ff1 lsc ws0">模式<span class="_ _0"> </span><span class="ff2 lsd">..................................................................................................................<span class="_ _5"></span>44 </span></span></div><div class="t m2 x5 h4 y17 ff2 fs2 fc0 sc0 ls1a wsc">2.6 Facade<span class="ff1 ls15 ws0">模式<span class="_ _7"> </span><span class="ff2 lsd">.......................................................................................................................<span class="_ _5"></span>49 </span></span></div><div class="t m2 x5 h4 y18 ff2 fs2 fc0 sc0 ls1b wsd">2.7 Proxy<span class="ff1 lsc ws0">模式<span class="_ _8"> </span><span class="ff2 lsd">.........................................................................................................................<span class="_ _4"></span>52 </span></span></div><div class="t m2 x1 h4 y19 ff2 fs2 fc0 sc0 lsb ws0">3 <span class="_"> </span><span class="ff1 lsc">行为模式</span><span class="lsd">...............................................................................................................................<span class="ls10">......<span class="_ _5"></span>55 </span></span></div><div class="t m2 x5 h4 y1a ff2 fs2 fc0 sc0 ls1c wse">3.1 T<span class="_ _1"></span>emplate<span class="ff1 lsc ws0">模式<span class="_ _5"></span><span class="ff2 lsd">....................................................................................................................<span class="_ _5"></span>55 </span></span></div><div class="t m2 x5 h4 y1b ff2 fs2 fc0 sc0 ls10 ws8">3.2 S<span class="_ _2"></span>trategy<span class="ff1 ls15 ws0">模式<span class="_ _0"> </span><span class="ff2 lsd">.....................................................................................................................<span class="_ _5"></span>59 </span></span></div><div class="t m2 x5 h4 y1c ff2 fs2 fc0 sc0 ls14 ws6">3.3 S<span class="_ _2"></span>tate<span class="ff1 lsc ws0">模式<span class="_ _4"></span><span class="ff2 lsd">...........................................................................................................................<span class="_ _5"></span>63 </span></span></div><div class="t m2 x5 h4 y1d ff2 fs2 fc0 sc0 ls11 ws3">3.4 Observer<span class="ff1 lsc ws0">模式<span class="_ _6"></span><span class="ff2 lsd">....................................................................................................................<span class="_ _5"></span>68 </span></span></div><div class="t m2 x5 h4 y1e ff2 fs2 fc0 sc0 ls1d wsf">3.5 Memento<span class="_ _2"></span><span class="ff1 lsc ws0">模式<span class="_ _0"> </span><span class="ff2 lsd">...................................................................................................................<span class="_ _4"></span>73 </span></span></div><div class="t m2 x5 h4 y1f ff2 fs2 fc0 sc0 ls1e ws10">3.6 Mediator<span class="_ _2"></span><span class="ff1 lsc ws0">模式<span class="_ _6"></span><span class="ff2 lsd">....................................................................................................................<span class="_ _5"></span>76 </span></span></div><div class="t m2 x5 h4 y20 ff2 fs2 fc0 sc0 ls1f ws11">3.7 Command<span class="ff1 lsc ws0">模式<span class="_ _6"></span><span class="ff2 lsd">..................................................................................................................<span class="_ _4"></span>81 </span></span></div><div class="t m2 x5 h4 y21 ff2 fs2 fc0 sc0 ls20 ws12">3.8 V<span class="_ _1"></span>isitor<span class="ff1 ls15 ws0">模式<span class="_ _6"></span><span class="ff2 lsd">........................................................................................................................<span class="_ _4"></span>87 </span></span></div><div class="t m2 x5 h4 y22 ff2 fs2 fc0 sc0 ls21 ws13">3.9 Chain of Responsibility<span class="_ _2"></span><span class="ff1 lsc ws0">模式<span class="_ _5"></span><span class="ff2 ls1b">.............................................................................................<span class="_ _5"></span>92 </span></span></div><div class="t m2 x5 h4 y23 ff2 fs2 fc0 sc0 lse ws14">3.10 Iterator<span class="ff1 lsc ws0">模式<span class="_ _5"></span><span class="ff2 lsd">.....................................................................................................................<span class="_ _5"></span>96 </span></span></div><div class="t m2 x5 h4 y24 ff2 fs2 fc0 sc0 ls22 ws15">3.1<span class="_ _2"></span>1 Interpreter<span class="ff1 lsc ws0">模式<span class="_ _6"></span><span class="ff2 lsd">..............................................................................................................<span class="_ _4"></span>100 </span></span></div><div class="t m2 x1 h4 y25 ff2 fs2 fc0 sc0 lsb ws0">4 <span class="_"> </span><span class="ff1 lsc">说明<span class="_ _0"> </span></span><span class="lsd">...............................................................................................................................<span class="_ _4"></span>...........<span class="_ _5"></span>105 </span></div><div class="t m2 x1 h4 y26 ff2 fs2 fc0 sc0 ls5 ws0"> </div><div class="t m2 x1 h4 y27 ff2 fs2 fc0 sc0 ls5 ws0"> </div><div class="t m2 x1 h4 y28 ff2 fs2 fc0 sc0 ls5 ws0"> </div><div class="t m0 x6 h2 y29 ff2 fs0 fc0 sc0 ls3 ws0"> <span class="ff1 ls5">第</span><span class="ls23 ws16"> 1 </span><span class="ff1 ls5">页<span class="ff2"> <span class="_"> </span></span>共</span><span class="ls23 ws16"> 105 </span><span class="ff1 ls5">页</span> <span class="ff3 ls24"> k<span class="_ _9"></span>_<span class="_ _9"></span>e<span class="_ _9"></span>c<span class="_ _9"></span>k<span class="_ _9"></span>e<span class="_ _9"></span>l<span class="_ _9"></span><span class="ff2 ls5"> </span></span></div><a class="l" rel='nofollow' onclick='return false;'><div class="d m3"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m3"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m3"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m3"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m3"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m3"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m3"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m3"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m3"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m3"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m3"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m3"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m3"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m3"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m3"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m3"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m3"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m3"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m3"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m3"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m3"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m3"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m3"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m3"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m3"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m3"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m3"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m3"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m3"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m3"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m3"></div></a></div><div class="pi" data-data='{"ctm":[1.611639,0.000000,0.000000,1.611639,0.000000,0.000000]}'></div></div>
</body>
</html>
<div id="pf2" class="pf w0 h0" data-page-no="2"><div class="pc pc2 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://static.pudn.com/prod/directory_preview_static/6251624074bc5c01059b28b6/bg2.jpg"><div class="t m0 x1 h2 y1 ff1 fs0 fc0 sc0 ls0 ws0">设计模式精解-<span class="ff2 ls1 ws1">GoF 23<span class="_"> </span></span>种设计模式解析附<span class="_ _0"> </span><span class="ff2 ls2">C++</span>实现源码<span class="ff2 ls3"> <span class="ff3 fc1 ls4">http://www<span class="_ _1"></span>.mscenter<span class="_ _2"></span>.edu.cn/blog/k_eckel<span class="ff2 fc0 ls5"> </span></span></span></div><div class="t m4 x1 h5 y2a ff4 fs3 fc0 sc0 ls25 ws0">0 <span class="_"> </span><span class="ff1 sc1 ls26">引言</span><span class="ls5"> </span></div><div class="t m1 x1 h6 y2b ff5 fs1 fc0 sc0 ls27 ws0">0.1<span class="_ _3"> </span><span class="ff6 sc1 ls28">设计模式解析(总序)</span><span class="ls5"> </span></div><div class="t m2 x1 h7 y2c ff2 fs2 fc0 sc0 ls5 ws0"> <span class="_ _a"> </span><span class="ff1">“<span class="ff5 fc1 lsc ws17">Next to My Life, Sof<span class="_ _2"></span>tware Is My Passion<span class="ff1 fc0 ls5 ws0">”<span class="ff2 lsc">——</span><span class="ff3 ws18">Robert C.Martin</span><span class="ff2 lsd">. </span></span></span></span></div><div class="t m2 x1 h4 y2d ff2 fs2 fc0 sc0 ls29 ws0"> <span class="ff1 ls2a">懂了设计模式,你就懂了面向对象分析和设计(</span><span class="ls2b">OOA/D<span class="ff1 ls2a">)的精要。反之好像也可能成</span></span></div><div class="t m2 x1 h4 y2e ff1 fs2 fc0 sc0 lsc ws0">立。道可道,非常道。道不远人,设计模式亦然如此。<span class="ff2 ls5"> </span></div><div class="t m2 x1 h4 y2f ff2 fs2 fc0 sc0 ls29 ws0"> <span class="ff1 lsc">一直想把自己的学习经验以及在项目中的应用经历拿出来和大家共享,<span class="_ _b"></span>却总是下不了这</span></div><div class="t m2 x1 h4 y30 ff1 fs2 fc0 sc0 lsc ws0">个决心:<span class="ff2 ls18">GoF<span class="_"> </span></span><span class="ls5">的<span class="_ _c"> </span><span class="ff2 lsb">23<span class="_"> </span></span></span>种模式研读、总结也总需要些时日,然而时间对于我来说总是不可预计</div><div class="t m2 x1 h4 y31 ff1 fs2 fc0 sc0 lsc ws0">的。<span class="ff2 ls5"> </span></div><div class="t m2 x7 h4 y32 ff1 fs2 fc0 sc0 lsc ws0">之所以下了这个决心,<span class="_ _1"></span>有两个原因:<span class="_ _d"></span>一是<span class="_ _c"> </span><span class="ff2 ls21">Robert<span class="_"> </span></span>的箴言,<span class="_ _d"></span>二是因为我是一个感恩的人,</div><div class="t m2 x1 h4 y33 ff1 fs2 fc0 sc0 lsc ws0">就像常说的:长怀感恩之心,人生便无遗憾。想想当时读<span class="_ _3"> </span><span class="ff2 ls18">GoF<span class="_ _e"> </span></span>的那本圣经时候的苦闷、实</div><div class="t m2 x1 h4 y34 ff1 fs2 fc0 sc0 ls5 ws0">现<span class="_ _c"> </span><span class="ff2 ls2c">23<span class="_"> </span></span><span class="lsc">个模式时候的探索、悟道后的欣悦,我觉得还是有这个意义。</span><span class="ff2"> </span></div><div class="t m1 x1 h6 y35 ff5 fs1 fc0 sc0 ls27 ws0">0.2<span class="_ _e"> </span><span class="ff6 sc1 ls2d">设计模式解析后记</span><span class="ls5"> </span></div><div class="t m2 x5 h8 y36 ff1 fs2 fc0 sc0 lsc ws0">写完了Interpreter模式之后,我习惯性的看看下一天的安排,却陡然发现<span class="fc2 lsb">GoF的<span class="_ _f"> </span>23<span class="ls5">个</span></span></div><div class="t m2 x1 h8 y37 ff1 fs2 fc2 sc0 lsc ws0">设计模式的解析</div><div class="t m2 x8 h8 y38 ff1 fs2 fc0 sc0 ls22 ws0">已经在我不经意间写完了。就像在一年前看GoF的《设计模式》一书,和半</div><div class="t m2 x1 h8 y39 ff1 fs2 fc0 sc0 ls22 ws0">年前用C++模拟、<span class="_ _10"></span>实现<span class="_ _f"> </span>23<span class="_ _f"> </span>种经典的设计模式一般,<span class="_ _11"></span>透过这个写解析的过程,<span class="_ _10"></span>我又看到了另外</div><div class="t m2 x1 h8 y3a ff1 fs2 fc0 sc0 lsc ws0">一个境界。<span class="_ _d"></span>一直认为学习的过程很多时候可以这样划分:<span class="_ _d"></span>自己学会一门知识<span class="_ _d"></span>(技术)<span class="_ _d"></span>、<span class="_ _1"></span>表达</div><div class="t m2 x1 h8 y3b ff1 fs2 fc0 sc0 lsc ws0">出来、<span class="_ _11"></span>教会别人、<span class="_ _d"></span>记录下来,<span class="_ _11"></span>虽然这个排序未必对每个人都合适<span class="_ _d"></span>(因为可能不同人有着不同</div><div class="t m2 x1 h8 y3c ff1 fs2 fc0 sc0 lsc ws0">的特点能力)<span class="_ _d"></span>。<span class="_ _1"></span>学一门知识,<span class="_ _1"></span><span class="fc1">经过努力、<span class="_ _d"></span>加以时日<span class="fc0">,<span class="_ _1"></span>总是可以达到的,<span class="_ _1"></span>把自己学的用自己的</span></span></div><div class="t m2 x1 h8 y3d ff1 fs2 fc0 sc0 lsc ws0">话表达出来就必须要将学到的知识加以消化、<span class="_ _12"></span>理解,<span class="_ _12"></span>而教会一个不懂这门知识的人则比表达</div><div class="t m2 x1 h8 y3e ff1 fs2 fc0 sc0 lsc ws0">出来要难,<span class="_ _12"></span>因为别人可能并不是适应你的表述方式,<span class="_ _12"></span>记录下来则需要经过沉淀、<span class="_ _13"></span>积累、<span class="_ _13"></span>思考,</div><div class="t m2 x1 h8 y3f ff1 fs2 fc0 sc0 lsc ws0">最后厚积薄发,方可小成。 </div><div class="t m2 x5 h8 y40 ff1 fs2 fc3 sc0 lsc ws0">设计模式之于面向对象系统的设计和开发的作用就有如数据结构之于面向过程开发的</div><div class="t m2 x1 h8 y41 ff1 fs2 fc3 sc0 lsc ws0">作用一般<span class="fc0">,<span class="_ _10"></span>其重要性和必要性自然不需要我赘述。<span class="_ _10"></span>然而学习设计模式的过程却是痛苦的,<span class="_ _10"></span>从</span></div><div class="t m2 x1 h8 y42 ff1 fs2 fc0 sc0 lsc ws0">阅读设计模式的圣经——GoF<span class="_ _f"> </span>的<span class="_ _10"></span>《设计模式:<span class="_ _9"></span>可复用面向对象软件的基础》<span class="_ _9"></span>时的枯燥、<span class="_ _10"></span>苦闷、</div><div class="t m2 x1 h8 y43 ff1 fs2 fc0 sc0 ls2e ws0">茫无头绪,到有一天突然有一种顿悟;自己去实现<span class="_ _f"> </span>GoF<span class="_ _c"> </span>的<span class="_ _f"> </span>23<span class="_ _c"> </span>中模式时候的知其然不知其所</div><div class="t m2 x1 h8 y44 ff1 fs2 fc0 sc0 lsc ws0">以然,<span class="_ _12"></span>并且有一天在自己设计的系统种由于设计的原因让自己苦不堪言,<span class="_ _12"></span>突然悟到了设计模</div><div class="t m0 x6 h2 y29 ff2 fs0 fc0 sc0 ls3 ws0"> <span class="ff1 ls5">第</span><span class="ls23 ws16"> 2 </span><span class="ff1 ls5">页<span class="ff2"> <span class="_"> </span></span>共</span><span class="ls23 ws16"> 105 </span><span class="ff1 ls5">页</span> <span class="ff3 ls24"> k<span class="_ _9"></span>_<span class="_ _9"></span>e<span class="_ _9"></span>c<span class="_ _9"></span>k<span class="_ _12"></span>e<span class="_ _9"></span>l<span class="_ _10"></span><span class="ff2 ls5"> </span></span></div><a class="l" rel='nofollow' onclick='return false;'><div class="d m3"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m3"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m3"></div></a></div><div class="pi" data-data='{"ctm":[1.611639,0.000000,0.000000,1.611639,0.000000,0.000000]}'></div></div>
<div id="pf3" class="pf w0 h0" data-page-no="3"><div class="pc pc3 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://static.pudn.com/prod/directory_preview_static/6251624074bc5c01059b28b6/bg3.jpg"><div class="t m0 x1 h2 y1 ff1 fs0 fc0 sc0 ls0 ws0">设计模式精解-<span class="ff2 ls1 ws1">GoF 23<span class="_"> </span></span>种设计模式解析附<span class="_ _0"> </span><span class="ff2 ls2">C++</span>实现源码<span class="ff2 ls3"> <span class="ff3 fc1 ls4">http://www<span class="_ _1"></span>.mscenter<span class="_ _2"></span>.edu.cn/blog/k_eckel<span class="ff2 fc0 ls5"> </span></span></span></div><div class="t m2 x1 h8 y45 ff1 fs2 fc0 sc0 lsc ws0">式种的某一个正好可以很好的解决问题,到自己设计的<span class="_ _f"> </span>elegant<span class="_ _c"> </span>的系统时候的喜悦与思考;</div><div class="t m2 x1 h8 y46 ff1 fs2 fc0 sc0 lsc ws0">一直到最后向别人去讲解设计模式,别人向你咨询设计模式,和别人讨论设计模式。就如</div><div class="t m2 x1 h8 y47 ff1 fs2 fc0 sc0 lsc ws0">GoF<span class="_ _f"> </span>在其前言中说到:一旦你理解了设计并且有了一种<span class="_ _2"></span>“Aha!<span class="_ _2"></span>”<span class="_ _1"></span>(而不是“Huh?”<span class="_ _1"></span>)的应</div><div class="t m2 x1 h8 y48 ff1 fs2 fc0 sc0 lsc ws0">用经验和体验后,<span class="_ _b"></span>你将用一种非同寻常的方式思考面向对象设计。<span class="_ _14"></span>这个过程我认为是漫长的,</div><div class="t m2 x1 h8 y49 ff1 fs2 fc0 sc0 lsb ws0">painful,<span class="_ _15"></span><span class="lsc">但是是非常必要的。<span class="_ _15"></span>经过了的才是自己的,<span class="_ _16"></span><span class="lsb">Scott <span class="_ _16"></span><span class="ls2f">Mayer<span class="_ _c"> </span>在其巨著<span class="_ _15"></span><span class="ls30">《E<span class="_ _4"></span>ffective <span class="_ _12"></span><span class="lsb">C++》</span></span></span></span></span></div><div class="t m2 x1 h8 y4a ff1 fs2 fc0 sc0 ls22 ws0">就曾经说过:C++老手和<span class="_ _f"> </span>C++新手的区别就是前者手背上有很多伤疤。是的在软件开发和设</div><div class="t m2 x1 h8 y4b ff1 fs2 fc0 sc0 lsc ws0">计的过程中,<span class="_ _11"></span>失败、<span class="_ _d"></span>错误是最好的老师,<span class="_ _11"></span>当然在系统开发中,<span class="_ _d"></span>失败和错误则是噩梦的开端和</div><div class="t m2 x1 h8 y4c ff1 fs2 fc0 sc0 lsc ws0">结束,因为你很难有改正错误的机会。<span class="fc3">因此,尽量让自己多几道疤痕是对的</span>。 </div><div class="t m2 x5 h8 y4d ff1 fs2 fc1 sc0 ls22 ws0">面向对象系统的分析和设计实际上追求的就是两点,<span class="_ _11"></span>一是高内聚<span class="_ _d"></span>(Cohesion)<span class="_ _11"></span>,<span class="_ _11"></span>而是低</div><div class="t m2 x1 h8 y4e ff1 fs2 fc1 sc0 ls31 ws0">耦合<span class="_ _1"></span>(Coupling)<span class="_ _1"></span>。<span class="_ _1"></span><span class="fc0 ls2e">这也是我们软件设计所准求的,<span class="_ _d"></span>因此无论是<span class="_ _f"> </span>OO<span class="_ _c"> </span>中的封装、<span class="_ _1"></span>继承、<span class="_ _d"></span>多态<span class="_ _4"></span>,</span></div><div class="t m2 x1 h8 y4f ff1 fs2 fc0 sc0 lsc ws0">还是我们的设计模式的原则和实例都是在为了这两个目标努力着、贡献着。 </div><div class="t m2 x5 h8 y50 ff1 fs2 fc1 sc2 ls32 ws0">道不远人,<span class="_ _d"></span>设计模式也是这般<span class="fc0 sc0 lsc">,<span class="_ _1"></span>正如我在</span></div><div class="t m2 x9 h8 y51 ff1 fs2 fc2 sc0 lsc ws0">《设计模式探索<span class="_ _1"></span>(总序)<span class="_ _d"></span>》<span class="_ _1"></span><span class="fc0">中提到的。<span class="_ _1"></span>设计模</span></div><div class="t m2 x1 h8 y52 ff1 fs2 fc0 sc0 lsc ws0">式并不是空的理论,<span class="_ _12"></span>并不是脱离实际的教条。<span class="_ _12"></span>就如我们在进行软件开发的过程会很自然用到</div><div class="t m2 x1 h8 y53 ff1 fs2 fc0 sc0 lsc ws0">很多的算法和结构来解决实际的问题,<span class="_ _12"></span>那些其实也就是数据结构中的重要概念和内容。<span class="_ _12"></span>在面</div><div class="t m2 x1 h8 y54 ff1 fs2 fc0 sc0 lsc ws0">向对象系统的设计和开发中,<span class="_ _10"></span>我们已经积累了很多的原则,<span class="_ _10"></span>比如<span class="fc1">面向对象中的封装、<span class="_ _10"></span>继承和</span></div><div class="t m2 x1 h8 y55 ff1 fs2 fc1 sc0 lsc ws0">多态、<span class="_ _11"></span>面向接口编程、<span class="_ _d"></span>优先使用组合而不是继承、<span class="_ _11"></span>将抽象和实现分离的思想<span class="fc0">等等,<span class="_ _d"></span>在设计模</span></div><div class="t m2 x1 h8 y56 ff1 fs2 fc0 sc0 lsc ws0">式中你总是能看到他们的影子,<span class="_ _10"></span>特别是组合<span class="_ _10"></span>(委托)<span class="_ _10"></span>和继承的差异带来系统在耦合性上的差</div><div class="t m2 x1 h8 y57 ff1 fs2 fc0 sc0 lsc ws0">别,<span class="_ _12"></span>更是在设计模式多次涉及到。<span class="_ _12"></span>而一些设计模式的思想在我们做系统的设计和开发中则是</div><div class="t m2 x1 h8 y58 ff1 fs2 fc0 sc0 lsc ws0">经常要用到的,比如说Template、Strategy模式的思想,Singleton模式的思想,Factory</div><div class="t m2 x1 h8 y59 ff1 fs2 fc0 sc0 ls2e ws0">模式的思想等等,<span class="_ _10"></span>还有很多的模式已经在我们的开发平台中扎根了,<span class="_ _10"></span>比如说Observer<span class="_ _10"></span>(其实</div><div class="t m2 x1 h8 y5a ff1 fs2 fc0 sc0 ls2b ws0">例为Model-Con<span class="_ _4"></span>trol-View模式)<span class="_ _b"></span><span class="ls2f">是MFC和Struts中的基本框架,<span class="_ _14"></span><span class="ls11">Iterator模式则在C++的STL</span></span></div><div class="t m2 x1 h8 y5b ff1 fs2 fc0 sc0 lsc ws0">中有实现等。<span class="_ _11"></span>或许有的人会说,<span class="_ _d"></span>我们不需要设计模式,<span class="_ _11"></span>我们的系统很小,<span class="_ _d"></span>设计模式会束缚我</div><div class="t m2 x1 h8 y5c ff1 fs2 fc0 sc0 lsc ws0">们的实现。<span class="_ _11"></span>我想说的是,<span class="_ _d"></span><span class="fc3">设计模式体现的是一种思想,<span class="_ _11"></span>而思想则是指导行为的一切,<span class="_ _d"></span>理解和</span></div><div class="t m2 x1 h8 y5d ff1 fs2 fc3 sc0 ls2e ws0">掌握了设计模式,并不是说记住了<span class="_ _f"> </span>23<span class="_ _c"> </span>种(或更多)设计场景和解决策略(实际上这也是很</div><div class="t m2 x1 h8 y5e ff1 fs2 fc3 sc0 lsc ws0">重要的一笔财富)<span class="_ _10"></span>,<span class="_ _10"></span>实际接受的是一种思想的熏陶和洗礼,<span class="_ _10"></span>等这种思想融入到了你的思想中</div><div class="t m2 x1 h8 y5f ff1 fs2 fc3 sc0 lsc ws0">后,你就会不自觉地使用这种思想去进行你的设计和开发,这一切才是最重要的<span class="fc0">。 </span></div><div class="t m2 x5 h8 y60 ff1 fs2 fc0 sc0 lsc ws0">之于学习设计模式的过程我想应该是一个<span class="fc1 sc2 ls32">迭代</span>的过程,<span class="_ _b"></span>我向来学东西的时候不追求一遍</div><div class="t m2 x1 h8 y61 ff1 fs2 fc0 sc0 lsc ws0">就掌握、<span class="_ _11"></span>理解透彻<span class="_ _d"></span>(很多情况也是不可能的)<span class="_ _11"></span>,<span class="_ _d"></span>我喜欢用一种迭代的思想来指导我的学习过</div><div class="t m2 x1 h8 y62 ff1 fs2 fc0 sc0 lsc ws0">程。<span class="_ _d"></span>看书看不懂、<span class="_ _d"></span>思想没有理解,<span class="_ _d"></span>可以反复去读、<span class="_ _d"></span>去思考,<span class="_ _1"></span>我认为这样一个过程是适合向我</div><div class="t m2 x1 h8 y63 ff1 fs2 fc0 sc0 lsc ws0">们不是有一个很统一的时间去学习一种技术和知识<span class="_ _14"></span>(可能那样有时候反而有些枯燥和郁闷)<span class="_ _b"></span><span class="ls5">。</span></div><div class="t m0 x6 h2 y29 ff2 fs0 fc0 sc0 ls3 ws0"> <span class="ff1 ls5">第</span><span class="ls23 ws16"> 3 </span><span class="ff1 ls5">页<span class="ff2"> <span class="_"> </span></span>共</span><span class="ls23 ws16"> 105 </span><span class="ff1 ls5">页</span> <span class="ff3 ls24"> k<span class="_ _9"></span>_<span class="_ _9"></span>e<span class="_ _9"></span>c<span class="_ _9"></span>k<span class="_ _12"></span>e<span class="_ _9"></span>l<span class="_ _10"></span><span class="ff2 ls5"> </span></span></div><a class="l" rel='nofollow' onclick='return false;'><div class="d m3"></div></a></div><div class="pi" data-data='{"ctm":[1.611639,0.000000,0.000000,1.611639,0.000000,0.000000]}'></div></div>
<div id="pf4" class="pf w0 h0" data-page-no="4"><div class="pc pc4 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://static.pudn.com/prod/directory_preview_static/6251624074bc5c01059b28b6/bg4.jpg"><div class="t m0 x1 h2 y1 ff1 fs0 fc0 sc0 ls0 ws0">设计模式精解-<span class="ff2 ls1 ws1">GoF 23<span class="_"> </span></span>种设计模式解析附<span class="_ _0"> </span><span class="ff2 ls2">C++</span>实现源码<span class="ff2 ls3"> <span class="ff3 fc1 ls4">http://www<span class="_ _1"></span>.mscenter<span class="_ _2"></span>.edu.cn/blog/k_eckel<span class="ff2 fc0 ls5"> </span></span></span></div><div class="t m2 x1 h8 y45 ff1 fs2 fc0 sc0 lsc ws0">GoF<span class="_ _f"> </span>在<span class="_ _2"></span>《设计模式》<span class="_ _1"></span>一书中也提到,<span class="_ _1"></span>如果不是一个有经验的面向对象设计人员,<span class="_ _2"></span>建议从最简</div><div class="t m2 x1 h8 y46 ff1 fs2 fc0 sc0 ls5 ws0">单最常用的设计模式入门,比如<span class="_ _f"> </span>AbstractFactory<span class="_ _c"> </span>模式、Ad<span class="ls33">apater<span class="_ _c"> </span>模式、Composite<span class="_ _f"> </span>模式、</span></div><div class="t m2 x1 h8 y47 ff1 fs2 fc0 sc0 ls34 ws0">Decorator<span class="_ _f"> </span>模式、Factory<span class="_ _f"> </span>模式、Observ<span class="_ _4"></span><span class="ls2e">er<span class="_ _f"> </span>模式、Strategy<span class="_ _c"> </span>模式、Template<span class="_ _f"> </span>模式等。我的</span></div><div class="t m2 x1 h8 y48 ff1 fs2 fc0 sc0 lsc ws0">感触是确实是这样,<span class="_ _12"></span>至少<span class="_ _f"> </span>GoF<span class="_ _c"> </span>列出的模式我都在开发和设计有用到,<span class="_ _12"></span>如果需要我这里再加上</div><div class="t m2 x1 h8 y49 ff1 fs2 fc0 sc0 ls33 ws0">几个我觉得在开发中会很有用的模式:Singleton<span class="_ _f"> </span>模式、Faça<span class="ls35">de<span class="_ _c"> </span>模式和<span class="_ _f"> </span>Bridge<span class="_ _c"> </span>模式。 </span></div><div class="t m2 x5 h8 y4a ff1 fs2 fc3 sc0 lsc ws0">写设计模式解析的目的其实是想把<span class="_ _f"> </span>GoF<span class="_ _c"> </span>的<span class="_ _15"></span>《设计模式》<span class="_ _15"></span>进行简化,<span class="_ _15"></span>变得容易理解和接受<span class="fc0 ls5">。</span></div><div class="t m2 x1 h8 y4b ff1 fs2 fc0 sc0 lsc ws0">GoF<span class="_ _f"> </span>的《设计模式》<span class="_ _1"></span>是圣经,<span class="_ _2"></span>但是同时因为<span class="_ _2"></span>《设计模式》<span class="_ _1"></span>一书是<span class="_ _c"> </span>4<span class="_ _c"> </span>位博士的作品,<span class="_ _2"></span>并且主要</div><div class="t m2 x1 h8 y4c ff1 fs2 fc0 sc0 lsc ws0">是基于<span class="_ _f"> </span>Erich<span class="_ _c"> </span>的博士论文,<span class="_ _12"></span>博士的特色我觉得最大的就是抽象,<span class="_ _12"></span>将一个具体的问题抽象到一</div><div class="t m2 x1 h8 y4d ff1 fs2 fc0 sc0 lsc ws0">般,<span class="_ _10"></span>形成理论。<span class="_ _10"></span>因此<span class="_ _c"> </span>GoF<span class="_ _f"> </span>的这本圣经在很多地方用语都比较精简和抽象,<span class="_ _10"></span>读过的可能都有一</div><div class="t m2 x1 h8 y4e ff1 fs2 fc0 sc0 lsc ws0">种确实是博士写出来的东西的感觉。<span class="_ _12"></span>抽象的好处是能够提供指导性的意见和建议,<span class="_ _12"></span>其瑕疵就</div><div class="t m2 x1 h8 y4f ff1 fs2 fc0 sc0 lsc ws0">是不容易为新手所理解和掌握。<span class="_ _12"></span>我的本意是想为抽象描述和具体的实现提供一个桥接<span class="_ _12"></span>(尽管</div><div class="t m2 x1 h8 y50 ff1 fs2 fc0 sc0 lsc ws0">GoF<span class="_ _f"> </span>在书中给出了很多的代码和实例,<span class="_ _1"></span>但是我觉得有两个不足:<span class="_ _1"></span>一是<span class="fc1">不完整</span>,<span class="_ _1"></span>结果是不好直</div><div class="t m2 x1 h8 y64 ff1 fs2 fc0 sc0 lsc ws0">接看到演示,<span class="_ _10"></span>因此我给出的代码都是完整的、<span class="_ _10"></span>可编译运行的;<span class="_ _10"></span>二是给出的都是一些比较大的</div><div class="t m2 x1 h8 y65 ff1 fs2 fc0 sc0 lsc ws0">系统中一部分简单实现,<span class="_ _12"></span>我想<span class="_ _f"> </span>GoF<span class="_ _c"> </span>的原意可能是想说明这些模式确实很管用,<span class="_ _12"></span>但是却同时带</div><div class="t m2 x1 h8 y66 ff1 fs2 fc0 sc0 lsc ws0">来一个更大的不好的地方就是<span class="fc1">不容易为新手理解和掌握</span><span class="ls36">),然<span class="_ _7"> </span>而<span class="_ _8"> </span></span><span class="fc1">这个过程是痛苦的,<span class="_ _10"></span>也可能</span></div><div class="t m2 x1 h8 y67 ff1 fs2 fc1 sc0 lsc ws0">是不成功的<span class="fc0">(可能会是这样)。这里面就有一个取舍的问题,一方面我想尽量去简化<span class="_ _f"> </span>GoF</span></div><div class="t m2 x1 h8 y68 ff1 fs2 fc0 sc0 lsc ws0">的描述,<span class="_ _12"></span>然而思考后的东西却在很多的时候和<span class="_ _f"> </span>GoF<span class="_ _c"> </span>的描述很相似,<span class="_ _12"></span>并且觉得将这些内容再抽</div><div class="t m2 x1 h8 y69 ff1 fs2 fc0 sc0 ls2e ws0">象一下,书中的很多表达则是最为经典的。当然这里面也有些许的例外,Bruce <span class="_ _9"></span>Eckel<span class="_ _f"> </span>在其</div><div class="t m2 x1 h8 y6a ff1 fs2 fc0 sc0 ls2e ws0">大作《Thinking <span class="_ _d"></span>in <span class="_ _d"></span>Pa<span class="ls5">tterns》一书中提到:Bridge<span class="_ _f"> </span>模式是<span class="_ _f"> </span>GoF<span class="_ _c"> </span>在描述其<span class="_ _f"> </span>23<span class="_ _c"> </span>中设计模式中</span></div><div class="t m2 x1 h8 y6b ff1 fs2 fc0 sc0 lsc ws0">描述得最为糟糕得模式,于我心有戚戚焉!具体的内容请参看我写的《设计模式解析——</div><div class="t m2 x1 h8 y6c ff1 fs2 fc0 sc0 ls22 ws0">Bridge<span class="_ _f"> </span>模式》一文。另外一方面,我又要尽量去避免走到了<span class="_ _c"> </span>GoF<span class="_ _f"> </span>一起,因为那样就失去了</div><div class="t m2 x1 h8 y6d ff1 fs2 fc0 sc0 lsc ws0">我写这个解析的本意了。<span class="_ _12"></span>这两个方面的权衡是很痛苦,<span class="_ _12"></span>并且结果可能也还是没有达到我的本</div><div class="t m2 x1 h8 y6e ff1 fs2 fc0 sc0 lsc ws0">意要求。 </div><div class="t m2 x5 h8 y6f ff1 fs2 fc0 sc0 lsc ws0">4<span class="_ _f"> </span>月份是我最不忙的时候,<span class="_ _2"></span>也是我非常忙的时候。<span class="_ _1"></span>论文的查阅、思考、<span class="_ _1"></span>撰写,<span class="_ _2"></span>几个项目</div><div class="t m2 x1 h8 y70 ff1 fs2 fc0 sc0 ls22 ws0">的前期准备<span class="_ _1"></span>(文档、<span class="_ _1"></span>Demo等)<span class="_ _1"></span>,<span class="_ _1"></span>俱乐部的诸多事宜,<span class="_ _2"></span>挑战杯的准备,<span class="_ _1"></span>学习<span class="_ _1"></span>(课业、<span class="_ _1"></span>专业等各</div><div class="t m2 x1 h7 y71 ff1 fs2 fc0 sc0 lsc ws0">个方面)等等,更加重要的是<span class="ff5 fc1 ls2e wsb">Visual CMCS</span><span class="fc1 sc2 ls5">(<span class="ff5 sc0 ls35 ws19">Visual C_minus Compiler System</span>)</span>的设</div><div class="t m2 x1 h8 y72 ff1 fs2 fc0 sc0 ls2e ws0">计和开发(Visual CMCS是笔者设计和开发的C_minus语言(C的子集)的编译系统,系统操</div><div class="t m2 x1 h8 y73 ff1 fs2 fc0 sc0 lsc ws0">作界面类似VC,并且准备代码分发和共享,详细信息请参考Visual CMCS的网站和Blog中的</div><div class="t m2 x1 h9 y74 ff1 fs2 fc0 sc0 lsc ws0">相关信息的发布),<span class="fc1 ls5"> <span class="ff3 ls37 ws1a">Visual CMCS1.0(Beta)</span><span class="lsc">终于在<span class="_ _f"> </span>4<span class="_ _c"> </span>月底发布了</span></span>,也在别人的帮助下构建</div><div class="t m2 x1 h8 y75 ff1 fs2 fc0 sc0 ls38 ws0">了Visual <span class="_ _13"></span><span class="ls13">C<span class="_ _4"></span>MCS的网站<span class="_ _b"></span><span class="ls5">(</span></span></div><div class="t m2 xa h4 y76 ff2 fs2 fc1 sc0 ls1b ws0">http://cs.whu.edu.cn/<span class="_ _2"></span>cmcs<span class="fc0 ls5"> <span class="_"> </span><span class="ff1">)<span class="_ _14"></span>。<span class="_ _b"></span><span class="lsc">之所以提及这个,<span class="_ _b"></span><span class="ls1c">一方面是在Visual <span class="_ _16"></span><span class="lsb">CMCS</span></span></span></span></span></div><div class="t m0 x6 h2 y29 ff2 fs0 fc0 sc0 ls3 ws0"> <span class="ff1 ls5">第</span><span class="ls23 ws16"> 4 </span><span class="ff1 ls5">页<span class="ff2"> <span class="_"> </span></span>共</span><span class="ls23 ws16"> 105 </span><span class="ff1 ls5">页</span> <span class="ff3 ls24"> k<span class="_ _9"></span>_<span class="_ _9"></span>e<span class="_ _9"></span>c<span class="_ _9"></span>k<span class="_ _12"></span>e<span class="_ _9"></span>l<span class="_ _10"></span><span class="ff2 ls5"> </span></span></div><a class="l" rel='nofollow' onclick='return false;'><div class="d m3"></div></a></div><div class="pi" data-data='{"ctm":[1.611639,0.000000,0.000000,1.611639,0.000000,0.000000]}'></div></div>
<div id="pf5" class="pf w0 h0" data-page-no="5"><div class="pc pc5 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://static.pudn.com/prod/directory_preview_static/6251624074bc5c01059b28b6/bg5.jpg"><div class="t m0 x1 h2 y1 ff1 fs0 fc0 sc0 ls0 ws0">设计模式精解-<span class="ff2 ls1 ws1">GoF 23<span class="_"> </span></span>种设计模式解析附<span class="_ _0"> </span><span class="ff2 ls2">C++</span>实现源码<span class="ff2 ls3"> <span class="ff3 fc1 ls4">http://www<span class="_ _1"></span>.mscenter<span class="_ _2"></span>.edu.cn/blog/k_eckel<span class="ff2 fc0 ls5"> </span></span></span></div><div class="t m2 x1 h8 y45 ff1 fs2 fc0 sc0 ls2e ws0">的设计和开发体验了很多的设计模式,比如Factoty模式、Single<span class="ls18">ton模式、Strategy模式、</span></div><div class="t m2 x1 h8 y46 ff1 fs2 fc0 sc0 ls18 ws0">State模式等等(我有一篇Blog中有关于这个的不完全的描述);另外一方面是这个设计模</div><div class="t m2 x1 h8 y47 ff1 fs2 fc0 sc0 lsc ws0">式解析实际上在这些工作的间隙中完成的,<span class="_ _12"></span>我一般会要求自己每天写一个模式,<span class="_ _12"></span>但是特殊的</div><div class="t m2 x1 h8 y48 ff1 fs2 fc0 sc0 lsc ws0">时候可能没有写或者一天写了不止一个。<span class="_ _10"></span><span class="fc1">写这些文章,<span class="_ _10"></span>本身没有任何功利的杂念,<span class="_ _10"></span>只是一个</span></div><div class="t m2 x1 h8 y49 ff1 fs2 fc1 sc0 lsc ws0">原生态的冲动,<span class="_ _11"></span>反而很轻松的完成了<span class="fc0">。<span class="_ _d"></span>有心栽花未必发,<span class="_ _11"></span>无心之事可成功,<span class="_ _d"></span>世间的事情可能</span></div><div class="t m2 x1 h8 y4a ff1 fs2 fc0 sc0 lsc ws0">在很多的时候恰恰就是那样了。 </div><div class="t m2 x5 h8 y4b ff1 fs2 fc0 sc0 lsc ws0">最后想用自己在阅读、<span class="_ _d"></span>学习、<span class="_ _d"></span>理解、<span class="_ _d"></span>实现、<span class="_ _1"></span>应用、<span class="_ _d"></span>思考设计模式后的一个感悟结束这个</div><div class="t m2 x1 h8 y4c ff1 fs2 fc0 sc0 lsc ws0">后记:只有真正理解了设计模式,才知道什么叫面向对象分析和设计。 </div><div class="t m2 x5 h4 y4d ff2 fs2 fc0 sc0 ls39 ws0"> <span class="_ _4"></span> <span class="_ _4"></span> <span class="_ _4"></span> k<span class="_ _13"></span>_<span class="_ _12"></span>e<span class="_ _13"></span>c<span class="_ _13"></span>k<span class="_ _13"></span>e<span class="_ _12"></span>l<span class="_ _13"></span> <span class="ff1 lsc">写毕于<span class="_ _f"> </span></span><span class="ls17">2005-05-04<span class="ff1 lsc">(五四青年节)</span><span class="ls29"> 1<span class="_ _13"></span><span class="ff1 ls5">:<span class="ff2 lsb">01 </span></span></span></span></div><div class="t m1 x1 h6 y77 ff5 fs1 fc0 sc0 ls3a ws0">0.3 <span class="_ _17"> </span><span class="ff6 sc1 ls3b">与作者联系</span><span class="ls5"> </span></div><div class="t m2 xb h4 y78 ff2 fs2 fc1 sc0 lsc ws0">Author <span class="_ _18"> </span><span class="fc0 ls1c">K_Eckel </span></div><div class="t m2 xc h4 y79 ff2 fs2 fc1 sc0 ls3c ws0">State <span class="_ _19"> </span><span class="fc0 ls20 ws1b">Candidate for Master’<span class="_ _2"></span>s Degree School<span class="ls12 ws1c"> of Computer <span class="_ _2"></span>W<span class="_ _1"></span>uhan University </span></span></div><div class="t m2 xb h4 y7a ff2 fs2 fc1 sc0 lse ws0">E_mail <span class="_ _1a"> </span><span class="ls3d">frwei@whu.edu.cn<span class="fc0 ls29"> </span></span></div><div class="t m2 x1 h4 y7b ff2 fs2 fc0 sc0 ls5 ws0"> </div><div class="t m4 x1 h5 y7c ff4 fs3 fc0 sc0 ls25 ws0">1 <span class="_"> </span><span class="ff1 sc1 ls3e">创建型模式</span><span class="ls5"> </span></div><div class="t m1 x1 h6 y7d ff5 fs1 fc0 sc0 ls3f ws1d">1.1 Factory<span class="_ _e"> </span><span class="ff6 sc1 ls40 ws0">模式</span><span class="ls5 ws0"> </span></div><div class="t m4 x1 ha y7e ff7 fs4 fc1 sc0 ls5 ws0"><span class="ff3"> <span class="_ _1b"> </span><span class="ff1 sc2 ls41">问题</span><span class="ff4"> </span></span></div><div class="t m2 x1 h4 y7f ff2 fs2 fc0 sc0 ls5 ws0"> <span class="_ _a"> </span><span class="ff1 lsc">在面向对象系统设计中经常可以遇到以下的两类问题:</span> </div><div class="t m2 x1 h4 y80 ff2 fs2 fc0 sc0 ls42 ws0"> 1<span class="_ _1c"></span><span class="ff1 lsc">)为了提高内聚(<span class="ff2 ls1a">Cohesion</span>)和松耦合(<span class="ff2 ls1e">Coupling</span><span class="ls5">)<span class="_ _14"></span><span class="lsc">,我们经常会抽象出一些类的公共</span></span></span></div><div class="t m2 x1 h8 y81 ff1 fs2 fc0 sc0 lsc ws0">接口以形成抽象基类或者接口。<span class="_ _b"></span>这样我们可以通过声明一个指向基类的指针来指向实际的子</div><div class="t m2 x1 h4 y82 ff1 fs2 fc0 sc0 lsc ws0">类实现,<span class="_ _10"></span>达到了多态的目的。<span class="_ _10"></span>这里很容易出现的一个问题<span class="_ _c"> </span><span class="ff2 ls5">n<span class="_"> </span></span>多的子类继承自抽象基类,<span class="_ _10"></span>我们</div><div class="t m2 x1 h4 y83 ff1 fs2 fc0 sc0 lsc ws0">不得不在每次要用到子类的地方就编写诸如<span class="_ _1d"> </span><span class="ff2 ls18">new <span class="_"> </span></span>×××<span class="ff2 ls5">;</span>的代码。这里带来两个问题<span class="_ _1d"> </span><span class="ff2 ls5">1</span>)客</div><div class="t m2 x1 h8 y84 ff1 fs2 fc0 sc0 lsc ws0">户程序员必须知道实际子类的名称<span class="_ _10"></span>(当系统复杂后,<span class="_ _10"></span>命名将是一个很不好处理的问题,<span class="_ _10"></span>为了</div><div class="t m2 x1 h8 y85 ff1 fs2 fc0 sc0 lsc ws0">处理可能的名字冲突,<span class="_ _12"></span>有的命名可能并不是具有很好的可读性和可记忆性,<span class="_ _12"></span>就姑且不论不同</div><div class="t m2 x1 h4 y86 ff1 fs2 fc0 sc0 lsc ws0">程序员千奇百怪的个人偏好了。<span class="_ _14"></span><span class="ls5">)<span class="_ _14"></span>,<span class="ff2">2</span><span class="lsc">)程序的扩展性和维护变得越来越困难。</span><span class="ff2"> </span></span></div><div class="t m0 x6 h2 y29 ff2 fs0 fc0 sc0 ls3 ws0"> <span class="ff1 ls5">第</span><span class="ls23 ws16"> 5 </span><span class="ff1 ls5">页<span class="ff2"> <span class="_"> </span></span>共</span><span class="ls23 ws16"> 105 </span><span class="ff1 ls5">页</span> <span class="ff3 ls24"> k<span class="_ _9"></span>_<span class="_ _9"></span>e<span class="_ _9"></span>c<span class="_ _9"></span>k<span class="_ _12"></span>e<span class="_ _9"></span>l<span class="_ _10"></span><span class="ff2 ls5"> </span></span></div><a class="l" rel='nofollow' onclick='return false;'><div class="d m3"></div></a></div><div class="pi" data-data='{"ctm":[1.611639,0.000000,0.000000,1.611639,0.000000,0.000000]}'></div></div>