??xml version="1.0" encoding="utf-8" standalone="yes"?>日本亚洲高清乱码中文在线观看,亚洲成av人片天堂网无码】,国产成人人综合亚洲欧美丁香花http://m.tkk7.com/jackybu/category/964.html<a ><b><font color=red>共有<script src=http://fastonlineusers.com/online.php?d=jackybu.blogjava.net></script>人在同时阅读此Blog</font></b></a>zh-cnWed, 28 Feb 2007 07:46:27 GMTWed, 28 Feb 2007 07:46:27 GMT60[转脓(chung)]设计模式的实际应?http://m.tkk7.com/jackybu/articles/10494.html?/dc:creator>?/author>Fri, 19 Aug 2005 05:23:00 GMThttp://m.tkk7.com/jackybu/articles/10494.htmlhttp://m.tkk7.com/jackybu/comments/10494.htmlhttp://m.tkk7.com/jackybu/articles/10494.html#Feedback0http://m.tkk7.com/jackybu/comments/commentRss/10494.htmlhttp://m.tkk7.com/jackybu/services/trackbacks/10494.html
  设计模式无处不在。在阅读技术方面的出版物或者浏览技术方面的|站Ӟ很容易发现对设计模式的引用。到目前为止Q?zhn)很可能已l阅读过Q至翻阅过Q一些设计模式方面的书籍Q如《Core J2EE Design Patterns》或者Gang of Four~写的《Design Patterns》。此Ӟ(zhn)可能会(x)对设计模式有一些疑问。设计模式如何帮助我Q他们是银弹吗?使用设计模式有什么问题吗Qؓ(f)什么我不能从集成开发环境(integrated development environmentQIDEQ中获得设计模式Q?BR>  上述的几个问题是采用设计模式q行处理q程中遇到的一些经兔R题。通常Q概念和q些概念在显CZ界中的应用是有区别的Q设计模式也不例外。本文将讨论设计模式在现实世界中的应用。这些信息可以帮助?zhn)成功地在目中采用设计模式来作出正确的决定?BR>
快速概q?/B>
  设计模式提供?jin)一U共享经验的方式Q可以团体受益和避免不断的重复发明。设计模式通常捕捉问题的描q、问题的语境、推荐的问题解决Ҏ(gu)以及(qing)使用解决Ҏ(gu)后可以预见到的结果。ؓ(f)?jin)具有最q泛的适用性(从而对更多的读者有用)(j)Q设计模式通常从取决于环境的精细节中抽象而来。这U抽象性生了(jin)一些把设计模式应用到现有的案例中所必需的译码。这是一个重要细节:(x)管设计模式是共享专业知识的好方法,但通常它对正确应用专业知识是非帔R要的?BR>  设计模式q个概念最初生于建筑行业。设计师Q设计徏{物而不是计机pȝQ意识到他们需要共享有x(chng)设计技术的x(chng)。这些想法是在可以设计师团体从分nl验和教训中L(fng)的设计模式中形成的。设计模式在80q代后期从徏{业q入计算机系l领域。面向对象(Object-orientedQOOQ原则逐渐得到普及(qing)Q而设计模式成为培育新的OOq随者的最?jng)_c(din)?BR>  Richard Gamma{(Z通常把他们称?Gang of Four [GoF] Q编著的《Design Patterns: Elements of Reusable Object-Oriented Software》一书设计模式成ؓ(f)万众瞩目的焦炏V随着设计模式逐渐普及(qing)Q他们所涉及(qing)的领域就像“Ben and Jerry”效应那样也逐渐q泛h。对那些不熟(zhn)著名冰淇淋品牌的h来说QBen and Jerry是一家冰淇淋产品的供应商Q其冰淇淋品拥有各U可以想象得到的配料l合Q还包括一些?zhn)永远惌不到的?j)。因此,它就是设计模式,和普通的OO设计模式一h源于GoF的著作,但是现在包括?jin)专为开发语a、应用服务器、行业合成等提供的设计模式?BR>
设计模式分类
  设计模式通常Ҏ(gu)一些公q性而组合在一赗GoF的著作把设计模式划分Zc:(x)Creational、Behavioral和Structural。用于J2EE的设计模式通常划分现层QPresentation TierQ、业务逻辑层(Business Logic TierQ和集成层(Integration TierQ。这U分l方式可以描述所有设计模式共享的公共l节更加LQ或者设计模式的分cd发现更加L?BR>  在对设计模式实际应用的讨ZQ需要把设计模式划分Zc:(x)broad exposure和isolated use。这U划分基于设计模式对应用E序设计人员和开发h员的可见性和应用E序的多个部分对设计模式的相依性?BR>  Broad exposure 设计模式因ؓ(f)可以影响多个团队成员或者应用程序的多个斚w的设计和开发而闻名。这c设计模式的品质包括Q?
  • 采用它会(x)对很多根据设计模式创建的cM生负面媄(jing)响?
  • 应用E序的不同部分知道设计模式的使用?
  • 使用q种设计模式的决定不能轻易取消?

  q类设计模式的例子有Model-View-ControllerQMVCQ模式、Value Object J2EE模式和Data Access ObjectQDAOQJ2EE模式
  Isolated use是指设计模式的用是隐藏l节的设计模式。这c设计模式的品质包括Q?/P>

  • 设计模式不媄(jing)响其他团队成员或者应用程序其他部分的工作?
  • 可以L地更改用设计模式的军_Q而且产生的媄(jing)响极?

  q类设计模式的例子有Singleton GoF模式或者Intercepting Filter J2EE模式?BR>  设计模式划分ؓ(f)几类Z(jin)解设计模式的范围提供?jin)一U快速的Ҏ(gu)。了(jin)解范围评估设计模式的媄(jing)响更加轻松。可以用或者抛弃这U设计模式吗Q一旦采用这U设计模式就?x)?jing)响应用程序的设计吗?q种设计模式影响?jin)应用程序的多个部分和其他的应用E序?jin)吗Q预先了(jin)解这些媄(jing)响ؓ(f)采用设计模式提供?jin)指对{?BR>
设计模式应用AntiPatterns
  随着设计模式逐渐普及(qing)Q出C(jin)另一U叫做AntiPatterns的模式类型。尽设计模式提供了(jin)关于可重复的最x(chng)法的专业知识Q但是AntiPatterns通常描述应当避免的重复行为。AntiPatterns 验证?jin)这L(fng)事实Q做错事情和办对事情的h一样多?BR>  本节探讨设计模式采用中的AntiPatterns。了(jin)解这些AntiPatterns可以帮助(zhn)避免设计模式采用中的缺陗如同设计模式一P在他们提供了(jin)一些远见或者他们是一些非常熟(zhn)的环境Ӟ在他们可以ؓ(f)(zhn)的l验d色彩和(zhn)不再感到孤独时Q此处的AntiPatterns是一个全新的概念。如果?zhn)想阅L多有关AntiPatterns的资料,请参见本文结֤的资源列表?BR>
AntiPattern清单
设计模式?是的Q我们全部拥?/B>
  问题Q?/B>军_在项目中使用哪一U设计模式?BR>  应用Q?/B> 既有broad exposure又有isolated use设计模式?BR>  环境Q?/B>一位开发h员通过介绍希望在一工E中使用设计模式?BR>  动力Q?/B>AntiPattern的动力通常有两U来源。一U是开发h员通过包括设计模式的最?jng)_跉|改进目的(f)望。另一U是开发h员天生的好奇?j)驱使他利用q个目来研I设计模式?BR>  推荐的解x(chng)案:(x)目中应用了(jin)所有知名的设计模式。设计模式手册生成一份清单,而目标是可以核对所有的设计模式?BR>  产生的语境:(x)目团队和交付的应用E序׃不自然地引入太多设计模式而遭受损失。这导致设计和开发非常复杂。这U不必要的复杂性会(x)从已l完成的工作量、开发团队了(jin)解发生事情的能力、应用程序的实际性能和功能的正确性等斚w影响开发成果?BR>  设计基本原理Q?/B>设计模式是专业知识的主要来源。尽用他们的效果很好Q但是全部用他们就未必也是好的?BR>实际解决Ҏ(gu)Q设计模式的描述包含?jin)用模式的目标语境。必考虑如何保设计模式匚w目。第二,设计模式不是来源于当某h阅读?jin)一本设计模式的著作后,问:(x)“我可以把这个设计模式用在什么地方?”而是来源于某人寻扑ַ发现问题的解x(chng)案?BR>
Developer/Project AntiPattern的实?/B>
  (也称为:(x)Design pattern xyz? YeahQ我们有10?
  问题Q?/B>在项目中或者项目之间控制设计模式的实现?BR>  应用Q?/B>broad exposure和isolated use设计模式都从解决q种环境中受益。但是,broad exposure设计模式无疑控制?jin)实现?BR>  语境Q?/B>开发团队将设计模式l合到项目中。团队由许多l验丰富的开发h员组成,他们知道应该什么时候用设计模式。所以会(x)正确的设计模式。如果涉?qing)到多个目Q项目之间没有设计模式实现共享?BR>  动力Q?/B>最l期限日益(f)q,团队成员工作效率很高。重C用实C(x)影响团队效率。假设他们都是专Ӟ他们的实现都非常优秀。在多项目情况中Q跨团队通信和代码共享要么没有被考虑Q要么被作ؓ(f)q度表中的潜在媄(jing)响被排除?BR>  推荐的解x(chng)案:(x)团队可以Ҏ(gu)需要单独包含和实现设计模式?BR>  产生的语境:(x)即使用?jin)正的设计模式Q但是他们是以很多不同的方式实现的。在限制集成和重C用成果的实现之间存在不兼宏V很多不必要的时间和工作被花费在l护、调试和扩展各种实现上。最l,各种实现都将被统一?BR>  设计基本原理Q?/B>应当允许专家成员独立工作。只要所包含的设计模式够好Q就不需要共享实现?BR>  实际解决Ҏ(gu)Q?/B>开发团队应当协调设计模式的使用。共享设计模式的公共实现可在来降低成本Q但是更重要的是Q它使开发h员(sh)间互相兼宏V如果需要,q种׃n可以被限制到划归先前讨论的broad exposure设计模式内。重用实现在目间也极有价|其在未来将要集成的时候?BR>
设计模式采用中IDE的角?/B>
  IDE在(h)l发展和提供更多的功能。最初的IDEl成?jin)一U编辑环境和一些调试工兗现在,他们通常包含设计环境、审计工兗配|管理系l集成等{。随着IDE不断扩展范围Q需要确认他们在设计模式实现中的角色。诚?dng)设计模式在开发语a中实玎ͼ而IDE可以用于~辑源代码。但是,IDE可以扮演其他的角色吗?
  一些IDEh下拉菜单Q(zhn)能够选择应用E序中包括的设计模式。虽然这可以加快设计模式的用,但是它只?x)导致更快地~写出极差的代码。评估这个特性需要记住几个因素?BR>  W一Q设计模式在抽象中描q问题,q要一些译码来辑ֈ正确的实现。但是,他们常常包含“示例实玎ͼsample implementationQ”,q且IDE正是这U示例类l构插入到应用程序中。这很可能不是所需要的实现Qƈ且把他们攑ֈ应用E序中将带来更多的困惑,以及(qing)需要更多的~辑和重构工作而不是思考最初的实现?BR>  W二Q和IDE拖放设计模式Ҏ(gu)有关的另一个问题是前面讨论的两UAntiPatterns。加快设计模式的实现很可能会(x)产生大量的设计模式应用,以及(qing)同一设计模式的多U版本,而不是解决Q意问题的版本?BR>  设计模式面(f)的挑(xi)战(sh)仅仅是得Cơ快速实玎ͼ而是定使用?jin)正的实现Q以?qing)机构中已有的一个完的实现?BR>
BEA WebLogic Workshop 8.1和设计模?/B>
  (zhn)可能是一位BEA的客P如果(zhn)正在阅L文,(zhn)可能想知道新的BEA WebLogic Workshop 8.1是如何媄(jing)响?zhn)的设计模式考虑的。首先,W(xu)ebLogic Workshop是IDEQ因此前面有关IDE的章节同样适用。对q些讨论感兴的Workshop的两个额外方面是控g和预实现的设计模式?
  WebLogic Workshop Controls是打包功能的一U方法,可以L其包含C用Workshop IDE的应用程序中。打包包括IDE必需的可视元素、运行时行ؓ(f)、要求的配置{等。控件是如何影响设计模式应用的呢Q还记得设计模式在前面划分ؓ(f)isolated use和broad exposure吗?划分到isolated usecȝ设计模式可能被打包成 Workshop Controls。把设计模式作ؓ(f)控g打包可 Workshop IDE的其他用户共享实玎ͼ从而避免了(jin)每一个Developer/Project AntiPattern中的实现?BR>  (zhn)可能想知道Z么broad exposure设计模式Z么不可以作ؓ(f)控g实现。原因是broad exposure设计模式D创徏?jin)许多其他类或者独立于其他应用E序。这U情况就不适合控g的即插即用方面。broad exposure设计模式的采用应当三思而后行,一旦采用就不能L取消。这些要求不W合WebLogic Workshop Control的目标?BR>  WebLogic Workshopq具有很多预实现设计模式Q如Pageflow和用h口结构。在Workshop 中,(zhn)可以创建JSP和定义Pageflow来控制Web应用E序面之间的定位。在q种情况下,W(xu)ebLogic Workshop使用行的Apache Struts 表现层框架。Workshop的这个方面(使用 StrutsQ提供了(jin)一UModel-View-ControllerQMVCQ设计模式实玎ͼ意味着不用创徏自己的MVC实现。Workshop包含的其他功能很可能替代(zhn)自q设计模式实现。尽一些设计模式实现的开盒即用很好,但是应当验证不仅实现而且实现创徏的WebLogicM依从性也非常合适?BR>
成功采用设计模式的三个步?/B>
  如何把设计模式的采用和日益(f)q的最后期限、紧~的预算和很多公司现有的有限团队资源相结合?以下是成功制订设计模式的三个步骤?BR>
强大的通信和培?/B>
  许多机构拥有领先技术,可能正式通过?jin)设计师论坛的论证或者非正式的公认专家。这些领先厂商将推广设计模式采用中的开N信Qƈ培训开发具体设计模式的团队。通信应当跨开发团队和目以便预先防止采用竖井和多U惟一的实玎ͼ谨记每个Developer/Project AntiPattern的实玎ͼ(j)。培训可以采用正式的internal lunch-and-learns、正式的internal class或者派一些员工参加外部培训。这些培训方式将?j)进正确的设计模式应用程序。如果仅有极的观众能够参加培训Q最佳的候选h是那些感觉适合在回来后能够培训其同事的人?BR>
设计模式采用指导
  设计模式可用于ə目受益Q但是他们也可能因ؓ(f)误用而对应用E序造成损害。应当鼓励采用他们,但是对其的采用应当受到审阅和验证。设计模式可以包含在设计和开发过E中。在M一U情况中Q设计模式的使用应当由审阅者确认和验证。在审阅q程中还可能?x)遇到这L(fng)情况Q额外的设计模式不适用于最初包括的地方。即使环境中没有q行正式的审阅,q一步骤也可以通过同事审阅或者团队讨论来完成。这一步骤中的审阅者要么是主要团队的成员,要么与他们徏立开N信?
  指导采用对于broad exposurecd的设计模式非常关键。这些设计模式具有很多相关的风险Q因Z们将创徏依赖性。这些依赖性可能在一些对象类中,例如Q只工作在更加广泛的DAO设计模式实现范围中的数据讉K对象QDAOQ、或者跨应用E序边界Q如使用Value Object设计模式在应用程序和应用E序层之间传输数据)(j)。这些设计模式也可以由项目中的其他h或者不同项目的人实玎ͼ而且实现应当重新使用Q不同于创徏另一U独特的实现?BR>
重用实现,不只是设计模?/B>
  只要在创q设计模式实现中有一定的满Q团队和公司可以在重用发生在代码层Ӟ而不是设计创意层时获得更多益处。企业L(fng)的最初设计模式是改进的实现。但是,真正的目标是重用实现。重用实现将DQa)其他可重用的c(取决于公共实玎ͼ(j)Qb)~短开发时间和降低成本Qc)~短l护旉和降低成本;d)在应用程序之间和内部L集成?BR>  q种重用对broad exposure设计模式非常重要Q有时是基本的)(j)。这些设计模式创Z(jin)外部依赖性(集成从公共实现中受益)(j)或者生全部的自定义类库(如果有公共基可重用Q。isolated use设计模式也可以从重用中获益,但是如果他们是根据具体情况定制的Q他们就非常难以重用?BR>  有时(zhn)可能会(x)问自己:(x)“如果重用比较好Qؓ(f)什么设计模式和可以重用的实C可以一同应用呢Q”在我们讨论设计模式如何使更多读者获益的时候才?x)讨个问题。如果可能,如果已经预定义了(jin)实现Q那么达到广泛适用性这个目标就?x)非常困难。然而,一旦设计模式被应用到特D的问题域或者技术基设施中,那么可以重用在该环境中产生的实现?BR>
架构中的设计模式
  q看h像是一件可怕的dQ需要掌握设计模式如何应用在实际情况中,如何构徏优质的实玎ͼ以及(qing)如何?j)进重用实现。完成该d的方法之一是在环境中引入应用E序架构。应用程序架构提供了(jin)应用E序需要的l构Q从而开发团队可以关注应用程序的域逻辑。这包含?jin)已实现的设计模式。除?jin)重用设计模式概忉|者单个实C外,可以在多个项目和应用E序之间重用架构。这U共享的公共实现保?jin)兼?gu),qؓ(f)开发和l护多种不同的实现提供了(jin)一U低成本替代Ҏ(gu)。兼Ҏ(gu)提供了(jin)重新使用需要的技术基。没有够的幅在这里深入讨论架构的其他重要品质Q如q行时监和理、可配置应用E序逻辑和适应性行为等。?zhn)可以从Carnegie Mellon Software Engineering Institute (www.sei.cmu.edu/ata/ata_init.html) 中学?fn)到更多有关架构的知识?BR>
l束?/B>
  设计模式是一Uo(h)人惊异的资源Q应该用他以增加?zhn)的优ѝ虽然设计模式提供了(jin)可重用的概念Q但是面临的?xi)战是决定用哪一U设计模式和致力于可以重用的实现。通过?jin)解采用设计模式中?x)产生的风险,可以在l箋(hu)学习(fn)和实现更多设计模式时避免风险?BR>  按照本文概述的步骤会(x)产生一个流E,用于在团队和机构中推q成功的设计模式采用?BR>
参考资?/B>

  • Brown、William J.QMalveau、Raphael C.QMcCormick、Hays W. "Skip"QMowbray、Thomas J. (1998)。《AntiPatterns: Refactoring Software, Architectures, and Projects in Crisis》,John Wiley & Sons
  • AntiPatternsQ?A target=_blank>www.antipatterns.com
  • Wiki站点Q?A target=_blank>http://c2.com/cgi/wiki?AntiPattern

关于作?BR>Walter Hurst是Wakesoft的奠Zh和首席技术官。他在尖端技术领域工作了(jin)十年。成立Wakesoft 之前QW(xu)alter是一名独立咨询师Q主要用Wakesoft技术的早期版本为客h供互联网解决Ҏ(gu)。在此之前,W(xu)alter是Xpedior的技术设计师Q负责领导internal efforts开发实现在多个客户目中的应用E序架构。在加入Xpedior之前QW(xu)alter是Andersen Consulting?Center战略技术方面的高咨询师。在AndersenQW(xu)alter为多家胦(ch)?00客户领导Enterprise目。Walter在密歇根州大学获得计机工程学士学位?/P>

]]>
[设计模式]关于23U设计模式的有趣见解(?http://m.tkk7.com/jackybu/articles/2895.html?/dc:creator>?/author>Thu, 07 Apr 2005 02:42:00 GMThttp://m.tkk7.com/jackybu/articles/2895.htmlhttp://m.tkk7.com/jackybu/comments/2895.htmlhttp://m.tkk7.com/jackybu/articles/2895.html#Feedback0http://m.tkk7.com/jackybu/comments/commentRss/2895.htmlhttp://m.tkk7.com/jackybu/services/trackbacks/2895.html创徏型模?/STRONG>

1、FACTORY—追MM不?jin)请吃饭了(jin),麦当劳的鸡翅和肯德基的鸡都是MM爱吃的东西,虽然口味有所不同Q但不管你带MM去麦当劳或肯德基Q只向服务员说“来四个鸡翅”就行了(jin)。麦当劳和肯德基是生鸡翅的Factory

工厂模式Q客L(fng)和工厂类分开。消费者Q何时候需要某U品,只需向工厂请求即可。消费者无M改就可以接纳C品。缺Ҏ(gu)当品修Ҏ(gu)Q工厂类也要做相应的修改。如Q如何创建及(qing)如何向客L(fng)提供?

2、BUILDER—MM最爱听的就是“我׃”这句话?jin),见到不同地方的MM,要能够用她们的方a跟她说这句话哦,我有一个多U语a译机,上面每种语言都有一个按键,见到MM我只要按对应的键Q它?yu)p够用相应的语a说出“我׃”这句话?jin),国外的MM也可以轻松搞掂,q就是我的“我׃”builder。(q一定比军在伊拉克用的译机好卖)(j)

建造模式:(x)品的内部表象和品的生成q程分割开来,从而一个徏造过E生成具有不同的内部表象的品对象。徏造模式得品内部表象可以独立的变化Q客户不必知道品内部组成的l节。徏造模式可以强制实行一U分步骤q行的徏造过E?

3、FACTORY METHOD—请MM去麦当劳吃汉堡,不同的MM有不同的口味Q要每个都记住是一件烦(ch)人的事情Q我一般采用Factory Method模式Q带着MM到服务员那儿Q说“要一个汉堡”,具体要什么样的汉堡呢Q让MM直接跟服务员说就行了(jin)?

工厂Ҏ(gu)模式Q核?j)工厂类不再负责所有品的创徏Q而是具体创建的工作交给子类dQ成Z个抽象工厂角Ԍ仅负责给出具体工厂类必须实现的接口,而不接触哪一个品类应当被实例化q种l节?

4、PROTOTYPE—跟MM用QQ聊天Q一定要说些深情的话语了(jin)Q我搜集?jin)好多肉ȝ情话Q需要时只要copy出来攑ֈQQ里面p?jin),q就是我的情话prototype?jin)。(100块钱一份,你要不要Q?

原始模型模式Q通过l出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的Ҏ(gu)创徏出更多同cd的对象。原始模型模式允许动态的增加或减品类Q品类不需要非得有M事先定的等U结构,原始模型模式适用于Q何的{l构。缺Ҏ(gu)每一个类都必配备一个克隆方法?

5、SINGLETON—俺?个漂亮的老婆Q她们的老公都是我,我就是我们家里的老公SigletonQ她们只要说道“老公”,都是指的同一个hQ那是?刚才做了(jin)个梦啦,哪有q么好的?

单例模式Q单例模式确保某一个类只有一个实例,而且自行实例化ƈ向整个系l提供这个实例单例模式。单例模式只应在有真正的“单一实例”的需求时才可使用?

l构型模?/STRONG>

6、ADAPTER—在朋友聚会(x)上碰C(jin)一个美女SarahQ从香港来的Q可我不?x)说_语Q她不会(x)说普通话Q只好求助于我的朋友kent?jin),他作为我和Sarah之间的AdapterQ让我和Sarah可以怺交谈?也不知道他会(x)不会(x)耍我)

适配器(变压器)(j)模式Q把一个类的接口变换成客户端所期待的另一U接口,从而原本因接口原因不匚w而无法一起工作的两个c能够一起工作。适配cd以根据参数返q(sh)个合适的实例l客L(fng)?

7、BRIDGE—早上碰到MMQ要说早上好Q晚上碰到MMQ要说晚上好Q碰到MMI了(jin)件新衣服Q要说你的衣服好漂亮哦,到MM新做的发型,要说你的头发好漂亮哦。不要问我“早上碰到MM新做?jin)个发型怎么说”这U问题,自己用BRIDGEl合一下不p?

桥梁模式Q将抽象化与实现化脱耦,使得二者可以独立的变化Q也是说将他们之间的强兌变成弱关联,也就是指在一个Y件系l的抽象化和实现化之间用组?聚合关系而不是(h)承关p,从而两者可以独立的变化?

8、COMPOSITE—Mary今天q生日。“我q生日,你要送我一件礼物。”“嗯Q好吧,d店,你自己挑(xi)。”“这件T恤挺漂亮Q买Q这条裙子好看,乎ͼq个包也不错Q买。”“喂Q买?jin)三件?jin)呀Q我只答应送一件礼物的哦。”“什么呀QT恤加裙子加包包,正好配成一套呀Q小姐,ȝ(ch)你包h。”“……”,MM都会(x)用Composite模式?jin),你?x)?jin)没有?

合成模式Q合成模式将对象l织到树(wi)l构中,可以用来描述整体与部分的关系。合成模式就是一个处理对象的?wi)结构的模式。合成模式把部分与整体的关系用树(wi)l构表示出来。合成模式得客L(fng)把一个个单独的成分对象和׃们复合而成的合成对象同{看待?

9、DECORATOR—Maryq完轮到Sarlyq生日,q是不要叫她自己?xi)?jin)Q不然这个月伙食费肯定玩完,拿出我去q在华山上照的照片Q在背面写上“最好的的礼物,是׃的Fita”,再到街上C品店买?jin)个像框Q卖C品的MM也很漂亮哦)(j)Q再N壁搞术设计的Mike设计?jin)一个漂亮的盒子装v来……,我们都是DecoratorQ最l都在修饰我q个人呀Q怎么P看懂?jin)吗Q?

装饰模式Q装饰模式以对客L(fng)透明的方式扩展对象的功能Q是l承关系的一个替代方案,提供比(h)承更多的灉|性。动态给一个对象增加功能,q些功能可以再动态的撤消。增加由一些基本功能的排列l合而生的非常大量的功能?

10、FACADE—我有一个专业的Nikon相机Q我喜Ƣ自己手动调光圈、快门,q样照出来的照片才专业,但MM可不懂这些,教了(jin)半天也不?x)。幸好相机有Facade设计模式Q把相机调整到自动档Q只要对准目标按快门p?jin),一切由相机自动调整Q这样MM也可以用q个相机l我拍张照片?jin)?

门面模式Q外部与一个子pȝ的通信必须通过一个统一的门面对象进行。门面模式提供一个高层次的接口,使得子系l更易于使用。每一个子pȝ只有一个门面类Q而且此门面类只有一个实例,也就是说它是一个单例模式。但整个pȝ可以有多个门面类?

11、FLYWEIGHT—每天跟MM发短信,手指都篏M(jin)Q最q买?jin)个新手机,可以把一些常用的句子存在手机里,要用的时候,直接拿出来,在前面加上MM的名字就可以发送了(jin)Q再不用一个字一个字敲了(jin)。共享的句子是FlyweightQMM的名字就是提取出来的外部特征Q根据上下文情况使用?

享元模式QFLYWEIGHT在拳?yn)L赛中指最轻量U。n元模式以׃n的方式高效的支持大量的细_度对象。n元模式能做到׃n的关键是区分内蕴状态和外蕴状态。内蕴状态存储在享元内部Q不?x)随环境的改变而有所不同。外蕴状态是随环境的改变而改变的。外蕴状态不能媄(jing)响内蕴状态,它们是相互独立的。将可以׃n的状态和不可以共享的状态从常规cM区分开来,不可以׃n的状态从c里剔除出去。客L(fng)不可以直接创׃n的对象,而应当用一个工厂对象负责创׃n的对象。n元模式大q度的降低内存(sh)对象的数量?

12、PROXY—跟MM在网上聊天,一开头L“hi,你好?“你从哪儿来呀Q”“你多大?jin)?”“n高多呀Q”这些话Q真?ch)hQ写个程序做为我的Proxy吧,凡是接收到这些话都设|好?jin)自动的回答Q接收到其他的话时再通知我回{,怎么P酷吧?

代理模式Q代理模式给某一个对象提供一个代理对象,q由代理对象控制Ҏ(gu)对象的引用。代理就是一个h或一个机构代表另一个h或者一个机构采取行动。某些情况下Q客户不x(chng)者不能够直接引用一个对象,代理对象可以在客户和目标对象直接起到中介的作用。客L(fng)分L不出代理主题对象与真实主题对象。代理模式可以ƈ不知道真正的被代理对象,而仅仅持有一个被代理对象的接口,q时候代理对象不能够创徏被代理对象,被代理对象必Lpȝ的其他角色代为创建ƈ传入?

行ؓ(f)模式

13、CHAIN OF RESPONSIBLEITY—晚上去上英语课Qؓ(f)?jin)好开溜坐C(jin)最后一排,哇,前面坐了(jin)好几个漂亮的MM哎,扑ּU条Q写上“Hi,可以做我的女朋友吗?如果不愿意请向前传”,U条׃个接一个的传上M(jin)Q糟p,传到W一排的MM把纸条传l老师?jin),听说是个老处奛_Q快?

责Q链模式:(x)在责任链模式中,很多对象由每一个对象对其下家的引用而接

h形成一条链。请求在q个链上传递,直到链上的某一个对象决定处理此h。客户ƈ不知道链上的哪一个对象最l处理这个请求,pȝ可以在不影响客户端的情况下动态的重新l织铑֒分配责Q。处理者有两个选择Q承担责L者把责Q推给下家。一个请求可以最l不被Q何接收端对象所接受?

14、COMMAND—俺有一个MM安得特别严,没法见面Q只好借助于她弟弟在我们俩之间传送信息,她对我有什么指C,写一张纸条让她弟弟带l我。这不,她弟弟又传送过来一个COMMANDQؓ(f)?jin)感谢他Q我请他吃了(jin)杂酱面Q哪知道他说Q“我同时l我姐姐三个h友送COMMANDQ就C最气Q才h吃面。”,:-(

命o(h)模式Q命令模式把一个请求或者操作封装到一个对象中。命令模式把发出命o(h)的责d执行命o(h)的责d割开Q委z不同的对象。命令模式允许请求的一方和发送的一方独立开来,使得h的一方不必知道接收请求的一方的接口Q更不必知道h是怎么被接Ӟ以及(qing)操作是否执行Q何时被执行以及(qing)是怎么被执行的。系l支持命令的撤消?

15、INTERPRETER—俺有一个《(chng)MM真经》,上面有各U(chng)MM的攻略,比如说去吃西的步骤、去看电(sh)qҎ(gu){等Q跟MMU会(x)Ӟ只要做一个InterpreterQ照着上面的脚本执行就可以?jin)?

解释器模式:(x)l定一个语a后,解释器模式可以定义出其文法的一U表C,q同时提供一个解释器。客L(fng)可以使用q个解释器来解释q个语言中的句子。解释器模式描q怎样在有?jin)一个简单的文法后,使用模式设计解释q些语句。在解释器模式里面提到的语言是指M解释器对象能够解释的Ml合。在解释器模式中需要定义一个代表文法的命o(h)cȝ{l构Q也是一pd的组合规则。每一个命令对象都有一个解释方法,代表对命令对象的解释。命令对象的{l构中的对象的Q何排列组合都是一个语a?



16、ITERATOR—我׃?jin)MaryQ不一切的向她求婚?

MaryQ“想要我跟你l婚Q得{应我的条g?

我:(x)“什么条件我都答应,你说吧?

MaryQ“我看上?jin)那个一克拉的钻石?

我:(x)“我乎ͼ我买Q还有吗Q?

MaryQ“我看上?jin)湖边的那栋别墅?

我:(x)“我乎ͼ我买Q还有吗Q?

MaryQ“你的小弟弟必须要有50cm镎(k)?

我脑袋嗡的一壎ͼ坐在椅子上,一咬牙Q“我剪,我剪Q还有吗Q?

…?

q代子模式:(x)q代子模式可以顺序访问一个聚集中的元素而不必暴露聚集的内部表象。多个对象聚在一起Ş成的MUC集,聚集对象是能够包容一l对象的容器对象。P代子模式P代逻辑装C个独立的子对象中Q从而与聚集本n隔开。P代子模式化了(jin)聚集的界面。每一个聚集对象都可以有一个或一个以上的q代子对象,每一个P代子的P代状态可以是彼此独立的。P代算法可以独立于聚集角色变化?

17、MEDIATOR—四个MM打麻,怺之间谁应该给谁多钱不清楚?jin),q怺当时我在旁边Q按照各自的{码数算钱,赚了(jin)q从我q里拿,赔了(jin)q也付l我Q一切就O(jin)K啦,俺得C(jin)四个MM的电(sh)话?

调停者模式:(x)调停者模式包装了(jin)一pd对象怺作用的方式,使得q些对象不必怺明显作用。从而他们可以松散偶合。当某些对象之间的作用发生改变时Q不?x)立卛_(jing)响其他的一些对象之间的作用。保证这些作用可以彼此独立的变化。调停者模式将多对多的怺作用转化Z对多的相互作用。调停者模式将对象的行为和协作抽象化,把对象在尺度的行ؓ(f)上与其他对象的相互作用分开处理?

18、MEMENTO—同时跟几个MM聊天Ӟ一定要记清楚刚才跟MM说了(jin)些什么话Q不然MM发现?jin)?x)不高兴的哦,q怺我有个备忘录Q刚才与哪个MM说了(jin)什么话我都拯一份放到备忘录里面保存Q这样可以随时察看以前的记录啦?

备忘录模式:(x)备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏装的条件下Q将一个对象的状态捉住,q外部化Q存储v来,从而可以在来合适的时候把q个对象q原到存储v来的状态?

19、OBSERVER—想知道׃公司最新MM情报吗?加入公司的MM情报邮gl就行了(jin)Qtom负责搜集情报Q他发现的新情报不用一个一个通知我们Q直接发布给邮gl,我们作ؓ(f)订阅者(观察者)(j)可以及(qing)时收到情报啦

观察者模式:(x)观察者模式定义了(jin)一U一队多的依赖关p,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化Ӟ?x)通知所有观察者对象,使他们能够自动更新自己?

20、STATE—跟MM交往Ӟ一定要注意她的状态哦Q在不同的状态时她的行ؓ(f)?x)有不同Q比如你U她今天晚上ȝ?sh)?jing)Q对你没兴趣的MM׃(x)说“有事情啦”,对你不讨厌但q没喜欢上的MM׃(x)说“好啊,不过可以带上我同事么Q”,已经喜欢上你的MM׃(x)说“几炚wQ看完电(sh)影再L(chng)吧怎么P”,当然你看?sh)?jing)q程中表现良好的话,也可以把MM的状态从不讨厌不喜欢变成喜欢哦?

状态模式:(x)状态模式允怸个对象在其内部状态改变的时候改变行为。这个对象看上去象是改变?sh)(jin)它的类一栗状态模式把所研究的对象的行ؓ(f)包装在不同的状态对象里Q每一个状态对象都属于一个抽象状态类的一个子cR状态模式的意图是让一个对象在其内部状态改变的时候,其行Z随之改变。状态模式需要对每一个系l可能取得的状态创立一个状态类的子cR当pȝ的状态变化时Q系l便改变所选的子类?

21、STRATEGY—跟不同cd的MMU会(x)Q要用不同的{略Q有的请?sh)?jing)比较好,有的则去吃小吃效果不错,有的LvҎ(gu)漫最合适,单目的都是ؓ(f)?jin)得到MM的芳?j),我的qMM锦囊中有好多Strategy哦?

{略模式Q策略模式针对一l算法,每一个算法封装到h共同接口的独立的cMQ从而得它们可以相互替换。策略模式得算法可以在不媄(jing)响到客户端的情况下发生变化。策略模式把行ؓ(f)和环境分开。环境类负责l持和查询行为类Q各U算法在具体的策略类中提供。由于算法和环境独立开来,法的增减,修改都不?x)?jing)响到环境和客L(fng)?

22、TEMPLATE METHOD——看q《如何说服女生上床》这部经典文章吗Q女生从认识C床的不变的步骤分为y遇、打破僵局、展开q求、接吅R前戏、动手、爱抚、进d大步?Template method)Q但每个步骤针对不同的情况,都有不一L(fng)做法Q这p看你随机应变?具体实现)Q?

模板Ҏ(gu)模式Q模板方法模式准备一个抽象类Q将部分逻辑以具体方法以?qing)具体构造子的Ş式实玎ͼ然后声明一些抽象方法来q子类实现剩余的逻辑。不同的子类可以以不同的方式实现q些抽象Ҏ(gu)Q从而对剩余的逻辑有不同的实现。先制定一个顶U逻辑框架Q而将逻辑的细节留l具体的子类d现?

23、VISITOR—情C(jin)Q要l每个MM送一束鲜花和一张卡片,可是每个MM送的花都要针对她个h的特点,每张卡片也要Ҏ(gu)个h的特Ҏ(gu)?xi),我一个h哪搞得清楚,q是找花店老板和礼品店老板做一下VisitorQ让花店老板Ҏ(gu)MM的特炚w一束花Q让C品店老板也根据每个h特点选一张卡Q这样就L多了(jin)Q?

讉K者模式:(x)讉K者模式的目的是封装一些施加于某种数据l构元素之上的操作。一旦这些操作需要修改的话,接受q个操作的数据结构可以保持不变。访问者模式适用于数据结构相Ҏ(gu)定的pȝQ它把数据结构和作用于结构上的操作之间的耦合解脱开Q得操作集合可以相对自q演化。访问者模式得增加新的操作变的很Ҏ(gu)Q就是增加一个新的访问者类。访问者模式将有关的行为集中到一个访问者对象中Q而不是分散到一个个的节点类中。当使用讉K者模式时Q要尽可能多的对象览逻辑攑֜讉K者类中,而不是放到它的子cM。访问者模式可以跨q几个类的等U结构访问属于不同的{l构的成员类?BR>


]]>
映射模式介绍 http://m.tkk7.com/jackybu/articles/1755.html?/dc:creator>?/author>Sat, 05 Mar 2005 15:07:00 GMThttp://m.tkk7.com/jackybu/articles/1755.htmlhttp://m.tkk7.com/jackybu/comments/1755.htmlhttp://m.tkk7.com/jackybu/articles/1755.html#Feedback0http://m.tkk7.com/jackybu/comments/commentRss/1755.htmlhttp://m.tkk7.com/jackybu/services/trackbacks/1755.html发现几篇关于对象关系映射的文章,ȝ?jin)各U对?关系的映方式和q些映射方式的应用环境以?qing)各U映方式下数据讉K的效率。介l的很细_(d)值得一看?

概述

对象/关系映射--聚合模式

对象/关系映射--l承模式

对象/关系映射--兌模式

]]>
վ֩ģ壺 ëƬAV뾫Ʒҹ| Ƶ| ձ| þþþ޾ƷŮ| AV| AAƬ߹ۿ| Ƶ߹ۿ| wwwѸƵ| Ƶ| þ޾Ʒ| þúݺݰۺӰԺ| ޻ɫһëƬ| ҹAVպAVȫ| ձvaҹĻþ| ߹ۿƵ| ߹ۿѰƵ| Ƶ߹ۿƵ| ҹƷþþþ | ԻȫƵվ | ҹAëƬ| 鶹Ƶѹۿ| 91avѹۿ| 99reƵ| ޾ƷѹۿƵ| Ƶ߹ۿ| һѹۿ| ձɫƵ | vavava888www| С˵ͼƬQVOD| avƬ߹ۿ| þþƷһ| ޹뾫ƷŮ˾þþò | gogo߹ۿ| 97Ƶ˰| aëƬѸƵ| þwww˳ɿƬ| ߳þѹۿ| | aëƬƵ| Ʒ͵Ƶۿ | AVƬɫ߹ۿ߳|