﻿<?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>IT博客-sugar-随笔分类-Design Pattern</title><link>http://www.cnitblog.com/sugar/category/1973.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 27 Sep 2011 06:56:53 GMT</lastBuildDate><pubDate>Tue, 27 Sep 2011 06:56:53 GMT</pubDate><ttl>60</ttl><item><title>探索设计模式开篇</title><link>http://www.cnitblog.com/sugar/archive/2006/02/22/6806.html</link><dc:creator>sugar</dc:creator><author>sugar</author><pubDate>Wed, 22 Feb 2006 00:25:00 GMT</pubDate><guid>http://www.cnitblog.com/sugar/archive/2006/02/22/6806.html</guid><wfw:comment>http://www.cnitblog.com/sugar/comments/6806.html</wfw:comment><comments>http://www.cnitblog.com/sugar/archive/2006/02/22/6806.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/sugar/comments/commentRss/6806.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/sugar/services/trackbacks/6806.html</trackback:ping><description><![CDATA[<h3 style="LINE-HEIGHT: normal; TEXT-ALIGN: center" align="center"><span style="COLOR: red; FONT-FAMILY: 宋体">探索设计模式开篇</span><span lang="EN-US" style="COLOR: red"><?xml:namespace prefix = o />    <o:p></o:p>    </span></h3><p class="MsoNormal" style="TEXT-ALIGN: right" align="right">    <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">——探索设计模式系列之一</span><span lang="EN-US" style="FONT-SIZE: 10pt">    <o:p></o:p>    </span></p><p class="MsoNormal" style="TEXT-ALIGN: right" align="right">    <span lang="EN-US" style="FONT-SIZE: 10pt">Terrylee</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">，</span><span lang="EN-US" style="FONT-SIZE: 10pt">2005</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">年</span><span lang="EN-US" style="FONT-SIZE: 10pt">12</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">月</span><span lang="EN-US" style="FONT-SIZE: 10pt">06</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">日</span><span lang="EN-US" style="FONT-SIZE: 10pt">    <o:p></o:p>    </span></p><p class="MsoNormal">    <b><span style="FONT-SIZE: 12pt; COLOR: rgb(0,102,153); FONT-FAMILY: 宋体">前言</span></b><b><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: rgb(0,102,153)">    <o:p></o:p>    </span></b></p><p class="MsoNormal" style="LINE-HEIGHT: 200%">    <span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">加入</span><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体"><a href="http://www.cnblogs.com/team/DesignPattern.html"><span style="COLOR: black; TEXT-DECORATION: none">Design &amp; Pattern</span><span lang="EN-US" style="COLOR: black; TEXT-DECORATION: none"><span lang="EN-US">团队</span></span></a></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">有几个月的时间了，惭愧的是从没有写过关于设计模式的随笔，得到<span lang="EN-US">wayfarer</span>的同意，把企业库系列的随笔放在了团队的首页上。不是不想去写这样的随笔，也不是没有时间，</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体"><?xml:namespace prefix = st1 />自己初学设计模式，去写设计模式的文章，有点班门弄斧的味道。园子里<st1:personname productid="吕震宇" w:st="on">吕震宇</st1:personname>    老师的《设计模式系列》和</span><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%">wayfarer</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">的《设计之道》堪称设计模式里的经典之作。可是正如</span><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%">wafarer</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">所说的那样，受到发表欲的蛊惑，本着交流就是进步的想法，思考再三，还是决定写这样的随笔，来对设计模式做一些探索和总结，起名曰“探索设计模式”，有些言过其实，就当是记录自己学习设计模式的历程吧，不过还是希望能得到各位前辈的指点！</span><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%">    <o:p></o:p>    </span></p><p class="MsoNormal" style="LINE-HEIGHT: 200%">    <span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%">    <o:p></o:p>    </span></p><p class="MsoNormal" style="LINE-HEIGHT: 200%">    <b><span style="FONT-SIZE: 12pt; COLOR: rgb(0,102,153); LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">设计模式</span></b><b><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: rgb(0,102,153); LINE-HEIGHT: 200%">    <o:p></o:p>    </span></b></p><p class="MsoNormal" style="LINE-HEIGHT: 200%">    <b><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">设计模式是规则吗？</span></b><b><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%">    <o:p></o:p>    </span></b></p><p class="MsoNormal" style="LINE-HEIGHT: 200%">    <span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">地上本没有路，走得人多了也就成了路。设计模式如同此理，它是经验的传承，并非体系；是被前人发现，经过总结形成了一套某一类问题的一般性解决方案，而不是被设计出来的定性规则；它不像算法那样可以照搬照用。</span><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%">    <o:p></o:p>    </span></p><p class="MsoNormal" style="LINE-HEIGHT: 200%">    <b><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">设计模式是架构吗？</span></b><b><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%">    <o:p></o:p>    </span></b></p><p class="MsoNormal" style="LINE-HEIGHT: 200%">    <span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">架构和模式应该是一个属于相互涵盖的过程，但是总体来说架构更加关注的是所谓的<span lang="EN-US">High-Level Design,</span>而模式关注的重点在于通过经验提取的<span lang="EN-US">“</span>准则或指导方案<span lang="EN-US">”</span>在设计中的应用，因此在不同层面考虑问题的时候就形成了不同问题域上的模式。模式的目标是，把共通问题中的不变部分和变化部分分离出来。不变的部分，就构成了模式，因此，模式是一个经验提取的<span lang="EN-US">“</span>准则<span lang="EN-US">”</span>，并且在一次一次的实践中得到验证，在不同的层次有不同的模式，小到语言实现，大到架构。在不同的层面上，模式提供不同层面的指导。</span><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">    <o:p></o:p>    </span></p><p class="MsoNormal" style="LINE-HEIGHT: 200%">    <b><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">设计模式，软件的永恒之道？</span></b><b><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%">    <o:p></o:p>    </span></b></p><p class="MsoNormal" style="LINE-HEIGHT: 200%">    <span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">这个问题没有答案，有的只是讨论，看一下一位前辈结合建筑学得出的几点心得吧：<span lang="EN-US">    <o:p></o:p>    </span></span></p><p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 0cm; LINE-HEIGHT: 200%">    <span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 200%">和建筑结构一样，软件中亦有诸多的<span lang="EN-US">“</span>内力<span lang="EN-US">”</span>。和建筑设计一样，软件设计也应该努力疏解系统中的内力，使系统趋于稳定、有生气。一切的软件设计都应该由此出发。<span lang="EN-US">    <o:p></o:p>    </span></span></p><p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 0cm; LINE-HEIGHT: 200%">    <span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 200%">任何系统都需要有变化，任何系统都会走向死亡。作为设计者，应该拥抱变化、利用变化，而不是逃避变化。<span lang="EN-US">    <o:p></o:p>    </span></span></p><p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 0cm; LINE-HEIGHT: 200%">    <span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%">好的软件只能<span lang="EN-US">“</span>产生<span lang="EN-US">”</span>而不能<span lang="EN-US">“</span>创造<span lang="EN-US">”</span>，我们所能做的只是用一个相对好的过程，尽量使软件朝向好的方向发展。<span lang="EN-US" style="COLOR: black">    <o:p></o:p>    </span></span></p><p class="MsoNormal" style="LINE-HEIGHT: 200%; TEXT-ALIGN: left" align="left">    <b><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">需要设计模式吗？<span lang="EN-US">    <o:p></o:p>    </span></span></b></p><p class="MsoNormal" style="LINE-HEIGHT: 200%; TEXT-ALIGN: left" align="left">    <span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">答案是肯定的，但你需要确定的是模式的应用是否过度？我得承认，世界上有很多天才</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">的程序员，他可以在一段代码中包含</span><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">6 </span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">种设计模式，也可以不用模式而把设计做得很好。但</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">我们的目标是追求有效的设计，而设计模式可以为这个目标提供某种参考模型、设计方法。<span lang="EN-US">    <o:p></o:p>    </span></span></p><p class="MsoNormal" style="LINE-HEIGHT: 200%; TEXT-ALIGN: left" align="left">    <span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">我们不需要奉</span><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">GOF</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">的设计模式为圭臬，但合理的运用设计模式，才是正确的抉择。</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">很多人看过</span><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">GOF</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">的《</span><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">Design Patterns</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">》，对这</span><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">23 </span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">种模式也背得滚瓜烂熟。但重要的不是</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">你熟记了多少个模式的名称，关键还在于付诸实践的运用。为了有效地设计，而去熟悉某种</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">模式所花费的代价是值得的，因为很快你会在设计中发现这种模式真的很好，很多时候它令</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">得你的设计更加简单了。<span lang="EN-US">    <o:p></o:p>    </span></span></p><p class="MsoNormal" style="LINE-HEIGHT: 200%; TEXT-ALIGN: left" align="left">    <span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">其实在软件设计人员中，唾弃设计模式的可能很少，盲目夸大设计模式功用的反而更多。</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">言必谈“模式”，并不能使你成为优秀的架构师。真正出色的设计师，懂得判断运用模式的</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">时机。</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">还有一个问题是，很多才踏入软件设计领域的人员，往往对设计模式很困惑。对于他们</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">来说，由于没有项目的实际经验，</span><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">OO </span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">的思想也还未曾建立，设计模式未免过于高深了。其</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">实，即使是非常有经验的程序员，也不敢夸口对各种模式都能合理应用。<span lang="EN-US">[--</span>摘自<span lang="EN-US">wayfare</span>的设计之道<span lang="EN-US">]</span></span><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">    <o:p></o:p>    </span></p><p class="MsoNormal" style="LINE-HEIGHT: 200%">    <span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">    <o:p></o:p>    </span></p><p class="MsoNormal" style="LINE-HEIGHT: 200%">    <b><span style="FONT-SIZE: 12pt; COLOR: rgb(0,102,153); LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">后记</span></b><b><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: rgb(0,102,153); LINE-HEIGHT: 200%">    <o:p></o:p>    </span></b></p><p class="MsoNormal" style="LINE-HEIGHT: 200%">    <span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">关于设计模式的理论性的文章，已经写了很多了，我不想再继续重复抄写下去，仅记录下上面几段话，用它来作探索设计模式系列的一个开篇吧。</span></p><img src ="http://www.cnitblog.com/sugar/aggbug/6806.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/sugar/" target="_blank">sugar</a> 2006-02-22 08:25 <a href="http://www.cnitblog.com/sugar/archive/2006/02/22/6806.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>深入浅出单件模式（Singleton Pattern）</title><link>http://www.cnitblog.com/sugar/archive/2006/02/22/6805.html</link><dc:creator>sugar</dc:creator><author>sugar</author><pubDate>Wed, 22 Feb 2006 00:20:00 GMT</pubDate><guid>http://www.cnitblog.com/sugar/archive/2006/02/22/6805.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 深入浅出单件模式（Singleton Pattern）             ——探索设计模式系列之二             Terrylee，2005年12月07日             概述             Singleton模式要求一个类有且仅有一个实例，并且提供了一个全局的访问点。这就提出了一个问题：如何绕过常规的构造器，提供一种机制来保证一个类只有一个实例？客户程序在调用某...&nbsp;&nbsp;<a href='http://www.cnitblog.com/sugar/archive/2006/02/22/6805.html'>阅读全文</a><img src ="http://www.cnitblog.com/sugar/aggbug/6805.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/sugar/" target="_blank">sugar</a> 2006-02-22 08:20 <a href="http://www.cnitblog.com/sugar/archive/2006/02/22/6805.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>