??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲爱爱视频,成人一区二区三区,精品av久久久久电影http://www.aygfsteel.com/franlk/category/9769.htmlzh-cnFri, 02 Mar 2007 06:24:24 GMTFri, 02 Mar 2007 06:24:24 GMT60[摘录]软g的架构与模式之经典架构模式简?/title><link>http://www.aygfsteel.com/franlk/articles/40220.html</link><dc:creator>FRANLK 的个人空?/dc:creator><author>FRANLK 的个人空?/author><pubDate>Mon, 10 Apr 2006 05:27:00 GMT</pubDate><guid>http://www.aygfsteel.com/franlk/articles/40220.html</guid><wfw:comment>http://www.aygfsteel.com/franlk/comments/40220.html</wfw:comment><comments>http://www.aygfsteel.com/franlk/articles/40220.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/franlk/comments/commentRss/40220.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/franlk/services/trackbacks/40220.html</trackback:ping><description><![CDATA[ <p> <font size="2">本文摘自Q?</font> <a > <font size="2">http://fanqiang.chinaunix.net/program/project/2005-06-16/3316.shtml </font> </a> <br /> </p> <br /> <font size="2">  </font> <font color="#cccccc"> <font size="2"> <font color="#000000">ҎLinda Rising的《Pattern Almanac》一书,已知的架构模式有七十多种。这是一个只多不的l计Q其中包括了很多通常认ؓ是设计模式的模式Q比如BridgeQFacadeQInterpreterQMediator{模式通常认ؓ是设计模式,但是在许多情况下Q也可以作ؓ架构模式出现Q因此也常常被当作架构模式?br /><br />  <b>Layers架构模式</b><br /><br />  在收集到用户对Y件的要求之后Q架构设计就开始了。架构设计一个主要的目的Q就是把pȝ划分成ؓ很多"板块"。划分的方式通常有两U,一U是横向的划分,一U是U向划分?br /><br />  横向划分系l按照商业目的划分。比如一个书店的理pȝ可以划分成ؓq货、销售、库存管理、员工管理等{?br /><br />  U向划分则不同,它按照抽象层ơ的高低Q将pȝ划分??Q或叫Layer。比如一个公司的内网理pȝ通常可以划分成ؓ下面的几个Layer:<br /><br />  一、网,也就是用L面,负责昄数据、接受用戯入;<br /><br />  二、领域层Q包括JavaBean或者COM对象、B2B服务{,装了必要的商业逻辑Q负责根据商业逻辑军_昄什么数据、以及如何根据用戯入的数据q行计算Q?br /><br />  三、数据库Q负责存储数据,按照查询要求提供所存储的数据?br /><br />  四、操作系l层Q比如Windows NT或者Solaris{?br /><br />  五、硬件层Q比如SUN E450服务器等<br /><br />  有h把这ULayer叫做TierQ但是Tier多带有物理含义,不同的Tier往往位于不同的计机上,ql连接v来,而Layer是纯_w辑的概念,与物理划分无兟?<br /><br />  Layers架构模式的好处是Q?br /><br />  W一、Q何一层的变化都可以很好地局限于q一层,而不会媄响到其他各层?br /><br />  W二、更Ҏ容纳新的技术和变化。Layers架构模式容许M一层变更所使用的技?br /><br />  <b>Fa?ade架构模式</b><br /><br />  外部与一个子pȝ的通讯必须通过一个统一的门面(FacadeQ对象进行,q就是Facade模式?br /><br />  C的Y件系l都是比较复杂的Q设计模式的d是协助设计师处理复杂系l的设计?br /><br />  设计师处理复杂系l的一个常见方法便是将?分而治?Q把一个系l划分ؓ几个较小的子pȝ。但是这样做了以后,设计师往往仍然会发C个子pȝ内仍然有太多的类型要处理。而用一个子pȝ的用端往往只关注一些特定的功能Q却要同时与子系l内部的许多对象打交道后才能辑ֈ目的Q请见下面的对象图?/font> <br /> <br /> </font> </font> <table width="90%" align="center" border="0"> <tbody> <tr> <td> <div align="center"> <font size="2"> <font color="#cccccc"> <img src="http://dev.yesky.com/imagelist/05/06/a87695fj2vm9.gif" border="0" /> <br /> </font>?、Facade架构模式的结构图?/font> </div> </td> </tr> </tbody> </table> <br /> <font size="2">  q就是一U不便,它得系l的逻辑变得不必要的复杂Q维护成本提高,复用率降低?br /><br />  用一个范例说明,中国大陆的医院便是一个子pȝQ按照部门职能,q个pȝ可以划分为挂受门诊、划仗化验、收银、取药等。看病的病h要与q些部门打交道,如同一个子pȝ的用端与一个子pȝ的各个类型打交道一P不是一件容易的事情?br /><br />  首先病h必须先挂P然后门诊。如果医生要求化验,病h必须首先划hQ然后缴ƾ,才能到化验部门做化验。化验后Q再回到门诊室,误下面的对象图?br /><br /></font> <table width="90%" align="center" border="0"> <tbody> <tr> <td> <div align="center"> <font size="2"> <img src="http://dev.yesky.com/imagelist/05/06/ho315ggk8hk0.jpg" border="0" /> <br />?、描q病人在医院里的体验。图中的Ҏ代表医院?</font> </div> </td> </tr> </tbody> </table> <br /> <font size="2">  解决q种不便的方法便是引qFacade模式。仍焉过医院的范例说明,可以讄一个接待员的位|,由接待员负责代ؓ挂号、划仗缴贏V取药等。这个接待员是Facade模式的体玎ͼ病h只接触接待员Q由接待员负责与医院的各个部门打交道Q请见下面的对象图?br /><br /></font> <table width="90%" align="center" border="0"> <tbody> <tr> <td> <div align="center"> <font size="2"> <img src="http://dev.yesky.com/imagelist/05/06/631z3q347q41.jpg" border="0" /> <br />?、描q经qFacade模式的改装后Q病人在医院里的体验。图中的Ҏ代表医院?/font> </div> </td> </tr> </tbody> </table> <br /> <font size="2">  Facade模式要求一个子pȝ的外部与其内部的通讯必须通过一个统一的门面(FacadeQ对象进行。Facade模式提供一个高{的接口,使得子系l更易于使用?br /><br />  使用了Facade模式之后Q本章的W一个图中所描述的一个子pȝ的用端对象所面对的复杂关pd可以化ؓ下面q个样子?<br /><br /></font> <table width="90%" align="center" border="0"> <tbody> <tr> <td> <div align="center"> <font size="2"> <img src="http://dev.yesky.com/imagelist/05/06/4j1k41qbnf7h.gif" border="0" /> <br />?、Facade架构模式的结构图</font> </div> </td> </tr> </tbody> </table> <br /> <font size="2">  描述l过Facade模式的改装后Q一个子pȝ的用端与子pȝ的关pR图中的大方框代表一个子pȝ?br /><br />  如同医院的接待员一PFacade模式的门面类型将使用端与子系l的内部复杂性分隔开Q得用端只需要与门面对象打交道,而不需要与子系l内部的很多对象打交道?br /><br />  <b>Mediator架构模式</b><br /><br />  Mediator模式包装了一pd对象怺作用的方式,使得q些对象不必互相明显参照Q从而它们可以较松散地耦合。当q些对象中的某些对象之间的相互作用发生改变时Q不会立卛_响到其它的一些对象之间的怺作用Q从而可以保证这些相互作用可以彼此独立地变化?<br /><br />  在下面的C意图中有大量的对象Q这些对象既会媄响别的对象,又会被别的对象所影响Q因此常常叫做同事(ColleagueQ对象。这些同事对象通过彼此的相互作用Ş成系l的行ؓ。从图中可以看出Q几乎每一个对象都需要与其它的对象发生相互作用,而这U相互作用表Cؓ一个对象与另一个对象的直接耦合?br /><br /></font> <table width="90%" align="center" border="0"> <tbody> <tr> <td> <div align="center"> <font size="2"> <img src="http://dev.yesky.com/imagelist/05/06/u3xb76t989n9.gif" border="0" /> <br />?、这是一个过度耦合的系l?/font> </div> </td> </tr> </tbody> </table> <br /> <font size="2">  通过引入调停者对象(MediatorQ,可以系l的|状l构变成以中介者ؓ中心的星形结构,如下图所C。在q个星Şl构中,同事对象不再通过直接的联pM另一个对象发生相互作用;相反圎ͼ它通过调停者对象与另一个对象发生相互作用。调停者对象的存在保证了对象结构上的稳定,也就是说Q系l的l构不会因ؓ新对象的引入造成大量的修改工作?<br /><br /></font> <table width="90%" align="center" border="0"> <tbody> <tr> <td> <div align="center"> <font size="2"> <img src="http://dev.yesky.com/imagelist/05/06/ty1x3qa272mo.gif" border="0" /> <br />?、这是一个用了Mediator架构模式之后的结构图</font> </div> </td> </tr> </tbody> </table> <br /> <font size="2">  比较传统的设计方法,面向对象的技术可以更好地协助设计师管理更为复杂的pȝ。一个好的面向对象的设计可以使对象之间增加协作性(CollaborationQ,减少耦合度(CouplingQ。一个深思熟虑的设计会把一个系l分解ؓ一相互协作的同事对象Q然后给每一个同事对象以独特的责任,恰当的配|它们之间的协作关系Q它们可以在一起工作?br /><br />  在Mediator模式中,所有的成员对象都可以协调工作,但是又不直接怺理。这些对象都与一个处于中心地位的调停者对象发生紧密的关系Q由q个调停者对象进行协调工作。这个协调者对象叫做调停者(MediatorQ,而调停者所协调的成员对象称做同事(ColleagueQ对象?br /><br />  在Colleague对象内部发生的事件会影响到所有的同事Q但是这U媄响不是以直接理的方式直接传到其它的对象上的。记住在组的成员增加时Q这L怺作用关系是以比指数更快的方式增加的。相反,q种影响仅仅直接影响到调停者对象,而调停者对象反q来会协调其它的同事QŞ成整个系l的行ؓ?br /><br />  如果组的成员增加时Q调停者对象可能会面修改Q而其它的同事则可以装做不知道q个新的成员一P不必修改。反q来Q如果小l的成员之一被从pȝ中删除的话,调停者对象需要对此做Z改,而小l中其它的同事则不必改动?br /><br />  <b>Interpreter架构模式</b><br /><br />  l定一个语a之后QInterpreter模式可以定义出其文法的一U表C,q同时提供一个直译器Q用端可以使用q个直译器来解释q个语言中的句子?br /><br />  如果某一cd问题一再地发生的话Q那么一个有意义的做法就是将此类型问题的各个实例表达Z个简单语a中的语句。这样就可以建造一个直译器Q通过解释q些语句辑ֈ解决问题的目的?br /><br />  例如Q依照一个匹配模式搜dW串便是一个常见的问题。与其ؓ每一个匹配模式徏造一个特定的法Q不如徏造一个一般性的法处理各种常规表达式。当接到一个指定的常规表达式时Q系l用一个直译器解释q个常规表达式,从而对字符串进行匹配?br /><br />  再比如VBAQVisual Basic for ApplicationsQ就不仅仅出现在微Y的Officepd软g中,q且可以供第三厂家出产的软g嵌入使用QCrystal Reports报表生成软g也包括了一个便于用的宏语aQ用户可以执行较ؓ复杂的命令操作。一般而言Q将VBA或者其它的语言软g嵌入到自q软g产品中,可以使品定制化QCustomizationQ能力大大增强,但是q些宏语a引擎往往都很昂贵?br /><br />  现在要介l的Interpreter模式描q怎样在有了一个简单的文法后,使用模式设计解释q些语句。熟悉了q个模式以后Q一个没有接收过形式语言和编译器的正规训l的设计师也可以自行设计一个简单的直译器,以便Z用端提供一个简单语aQ或者在pȝ内部使用一个简单语a描述一个合适的问题?br /><br />  <b>语言、直译器和剖析器</b><br /><br />  Interpreter模式只描q直译器是怎样工作的,q不指明怎样在执行时创徏新的直译器。虽然广义地讲直译器不一定要有一个剖析器QParserQ,但是使用剖析器仍然是最常见的徏立直译器的办法。一个剖析器可以从一个档或命令行d文字性命令,q创建直译器?br />剖析器是一U能够识别文字ƈ文字按照一定规则进行分解以便进一步处理的对象。剖析器能够识别的字W串叫做语言。通常建立的小型计机语言是与环境无关的语aQ也是遵@一定的文法的文字模式,所谓文法,便是军_怎样语a的元素组合v来的规则的集合。剖析器便是Ҏl合规则字W串分解的?br /><br />  抽象地讲Q语aq不一定是以字W串的Ş式表辄。在Interpreter模式里面所提到的语a是指M直译器对象能够解释的Ml合。在Interpreter模式中,需要定义一个代表文法的命ocd的等U结构,也就是一pd的组合规则;每一个命令对象都有一个解释方法,代表对命令对象的解释?br /><br />  命o对象的等U结构中的对象的M排列l合都是一个语aQ而剖析器的工作便是将一个文字性语a译成ؓ{效的直译器语言。因此,直译器往往需要剖析器?br /><br />  <b>认识Jack?/b>Q?br /><br />  剖析器生成器QParser GeneratorQ,常常UCؓ~译器的~译器(Compiler ComplierQ。Sun Microsystem提供一个专为JavaE序员发明的强大的剖析器生成器,最初叫做JackQ后来改名ؓJavaCC?br /><br />  要用JavaCCQ必M用它提供的脚本语a~写一个脚本,然后执行JavaCC生成Java源代码。这生成的源代码是所需的剖析器。现在Sun已经不再负责JavaCC的研发,对JavaCC感兴的读者可以从http://www.experimentalstuff.com/Technologies/JavaCC得到免费的JavaCC和相x据?br /><br />  JavaCC最早命名ؓJack是ؓ了与一个早广泛用的剖析器生成器YACC谐音。如果读者已l熟悉了YACCQ可以用YACC辑ֈ同样的目的;只是相比之下JavaCC更容易得到JavaE序员的喜爱?<!-- 正文end --><br />(http://www.fanqiang.com)<br /></font> <img src ="http://www.aygfsteel.com/franlk/aggbug/40220.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/franlk/" target="_blank">FRANLK 的个人空?/a> 2006-04-10 13:27 <a href="http://www.aygfsteel.com/franlk/articles/40220.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ϫ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Դ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ʊ</a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">˫</a>| <a href="http://" target="_blank">Ӽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">˶</a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ְ</a>| <a href="http://" target="_blank">ʯ</a>| <a href="http://" target="_blank">÷ӿ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">«ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Դ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ԭ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƽ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>