ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美电影一区二区,加勒比av一区二区,99porn视频在线http://www.aygfsteel.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[转脓]设计模式的实际应ç”?http://www.aygfsteel.com/jackybu/articles/10494.htmlè¾?/dc:creator>è¾?/author>Fri, 19 Aug 2005 05:23:00 GMThttp://www.aygfsteel.com/jackybu/articles/10494.htmlhttp://www.aygfsteel.com/jackybu/comments/10494.htmlhttp://www.aygfsteel.com/jackybu/articles/10494.html#Feedback0http://www.aygfsteel.com/jackybu/comments/commentRss/10494.htmlhttp://www.aygfsteel.com/jackybu/services/trackbacks/10494.html
  设计模式无处不在。在阅读技术方面的出版物或者浏览技术方面的¾|‘ç«™æ—Óž¼Œå¾ˆå®¹æ˜“发现对设计模式的引用。到目前为止åQŒæ‚¨å¾ˆå¯èƒ½å·²¾lé˜…读过åQˆè‡³ž®‘翻阅过åQ‰ä¸€äº›è®¾è®¡æ¨¡å¼æ–¹é¢çš„书籍åQŒå¦‚《Core J2EE Design Patterns》或者Gang of Four¾~–写的《Design Patterns》。此æ—Óž¼Œæ‚¨å¯èƒ½ä¼šå¯¹è®¾è®¡æ¨¡å¼æœ‰ä¸€äº›ç–‘问。设计模式如何帮助我åQŸä»–们是银弹吗?使用设计模式有什么问题吗åQŸäؓ什么我不能从集成开发环境(integrated development environmentåQŒIDEåQ‰ä¸­èŽ·å¾—è®¾è®¡æ¨¡å¼åQ?BR>  上述的几个问题是采用设计模式˜q›è¡Œå¤„理˜q‡ç¨‹ä¸­é‡åˆ°çš„一些经兔R—®é¢˜ã€‚通常åQŒæ¦‚念和˜q™äº›æ¦‚念在显½CÞZ¸–界中的应用是有区别的åQŒè®¾è®¡æ¨¡å¼ä¹Ÿä¸ä¾‹å¤–。本文将讨论设计模式在现实世界中的应用。这些信息可以帮助您成功地在™å¹ç›®ä¸­é‡‡ç”¨è®¾è®¡æ¨¡å¼æ¥ä½œå‡ºæ­£ç¡®çš„决定ã€?BR>
快速概˜q?/B>
  设计模式提供了一¿Uå…±äº«ç»éªŒçš„æ–¹å¼åQŒå¯ä»¥ä‹É团体受益和避免不断的重复发明。设计模式通常捕捉问题的描˜q°ã€é—®é¢˜çš„语境、推荐的问题解决æ–ÒŽ¡ˆä»¥åŠä½¿ç”¨è§£å†³æ–ÒŽ¡ˆåŽå¯ä»¥é¢„è§åˆ°çš„ç»“æžœã€‚äØ“äº†å…·æœ‰æœ€òq¿æ³›çš„适用性(从而对更多的读者有用)åQŒè®¾è®¡æ¨¡å¼é€šå¸¸ä»Žå–决于环境的精¼‹®ç»†èŠ‚ä¸­æŠ½è±¡è€Œæ¥ã€‚è¿™¿UæŠ½è±¡æ€§äñ”生了一些把设计模式应用到现有的案例中所必需的译码。这是一个重要细节:ž®½ç®¡è®¾è®¡æ¨¡å¼æ˜¯å…±äº«ä¸“业知识的好方法,但通常它对正确应用专业知识是非帔R‡è¦çš„ã€?BR>  设计模式˜q™ä¸ªæ¦‚念最初äñ”生于建筑行业。设计师åQˆè®¾è®¡å¾½{‘物而不是计½Ž—机¾pȝ»ŸåQ‰æ„è¯†åˆ°ä»–们需要共享有å…Ïx­£¼‹®è®¾è®¡æŠ€æœ¯çš„æƒÏx³•。这些想法是在可以ä‹É设计师团体从分äín¾léªŒå’Œæ•™è®­ä¸­èŽïL›Šçš„设计模式中形成的。设计模式在80òq´ä»£åŽæœŸä»Žå¾½{‘业˜q›å…¥è®¡ç®—机系¾lŸé¢†åŸŸã€‚面向对象(Object-orientedåQŒOOåQ‰åŽŸåˆ™é€æ¸å¾—åˆ°æ™®åŠåQŒè€Œè®¾è®¡æ¨¡å¼æˆä¸ºåŸ¹è‚²æ–°çš„OO˜q½éšè€…的最佛_®žè·üc€?BR>  Richard Gamma½{‰ï¼ˆäºÞZ»¬é€šå¸¸æŠŠä»–们称ä½?Gang of Four [GoF] åQ‰ç¼–著的《Design Patterns: Elements of Reusable Object-Oriented Software》一书ä‹Éè®¾è®¡æ¨¡å¼æˆäØ“ä¸‡ä¼—çž©ç›®çš„ç„¦ç‚V€‚随着设计模式逐渐普及åQŒä»–们所涉及的领域就像“Ben and Jerry”效应那样也逐渐òq¿æ³›èµäh¥ã€‚对那些不熟悉著名冰淇淋品牌的äh来说åQŒBen and Jerry是一家冰淇淋产品的供应商åQŒå…¶å†°æ·‡æ·‹äñ”品拥有各¿Uå¯ä»¥æƒ³è±¡å¾—到的配料¾l„合åQˆè¿˜åŒ…括一些您永远惌™±¡ä¸åˆ°çš„)。因此,它就是设计模式,和普通的OO设计模式一æ äh¥æºäºŽGoF的著作,但是现在包括了专为开发语­a€ã€åº”用服务器、行业合成等提供的设计模式ã€?BR>
设计模式分类
  设计模式通常æ ÒŽ®ä¸€äº›å…¬å…Þq‰¹æ€§è€Œç»„合在一赗÷€‚GoF的著作把设计模式划分ä¸ÞZ¸‰¾c»ï¼šCreational、Behavioralå’ŒStructural。用于J2EEçš„è®¾è®¡æ¨¡å¼é€šå¸¸åˆ’åˆ†ä¸ø™¡¨çް层åQˆPresentation TieråQ‰ã€ä¸šåŠ¡é€»è¾‘å±‚ï¼ˆBusiness Logic TieråQ‰å’Œé›†æˆå±‚(Integration TieråQ‰ã€‚è¿™¿Uåˆ†¾l„方式可以ä‹É描述所有设计模式共享的公共¾l†èŠ‚æ›´åŠ è½ÀL¾åQŒæˆ–者ä‹É设计模式的分¾cÕd’Œå‘现更加è½ÀL¾ã€?BR>  在对设计模式实际应用的讨è®ÞZ¸­åQŒéœ€è¦æŠŠè®¾è®¡æ¨¡å¼åˆ’分ä¸ÞZ¸¤¾c»ï¼šbroad exposureå’Œisolated use。这¿Uåˆ’分基于设计模式对应用½E‹åºè®¾è®¡äººå‘˜å’Œå¼€å‘äh员的可见性和应用½E‹åºçš„多个部分对设计模式的相依性ã€?BR>  Broad exposure è®¾è®¡æ¨¡å¼å› äØ“å¯ä»¥å½±å“å¤šä¸ªå›¢é˜Ÿæˆå‘˜æˆ–è€…åº”ç”¨ç¨‹åºçš„å¤šä¸ªæ–šw¢çš„设计和开发而闻名。这¾c»è®¾è®¡æ¨¡å¼çš„品质包括åQ?
  • 采用它会对很多根据设计模式创建的¾cÖMñ”生负面媄响ã€?
  • 应用½E‹åºçš„不同部分知道设计模式的使用ã€?
  • 使用˜q™ç§è®¾è®¡æ¨¡å¼çš„决定不能轻易取消ã€?

  ˜q™ç±»è®¾è®¡æ¨¡å¼çš„例子有Model-View-ControlleråQˆMVCåQ‰æ¨¡å¼ã€Value Object J2EE模式和Data Access ObjectåQˆDAOåQ‰J2EE模式
  Isolated use是指设计模式的ä‹É用是隐藏¾l†èŠ‚çš„è®¾è®¡æ¨¡å¼ã€‚è¿™¾c»è®¾è®¡æ¨¡å¼çš„品质包括åQ?/P>

  • 设计模式不媄响其他团队成员或者应用程序其他部分的工作ã€?
  • 可以è½ÀL¾åœ°æ›´æ”¹ä‹É用设计模式的军_®šåQŒè€Œä¸”产生的媄响极ž®ã€?

  ˜q™ç±»è®¾è®¡æ¨¡å¼çš„例子有Singleton GoF模式或者Intercepting Filter J2EE模式ã€?BR>  ž®†è®¾è®¡æ¨¡å¼åˆ’åˆ†äØ“å‡ ç±»ä¸ÞZº†è§£è®¾è®¡æ¨¡å¼çš„范围提供了一¿Uå¿«é€Ÿçš„æ–ÒŽ³•。了解范围ä‹É评估设计模式的媄响更加轻松。可以ä‹É用或者抛弃这¿Uè®¾è®¡æ¨¡å¼å—åQŸä¸€æ—¦é‡‡ç”¨è¿™¿Uè®¾è®¡æ¨¡å¼å°±ä¼šåª„响应用程序的设计吗?˜q™ç§è®¾è®¡æ¨¡å¼å½±å“äº†åº”用程序的多个部分和其他的应用½E‹åºäº†å—åQŸé¢„å…ˆäº†è§£è¿™äº›åª„å“äØ“é‡‡ç”¨è®¾è®¡æ¨¡å¼æä¾›äº†æŒ‡å¯¹{€?BR>
设计模式应用AntiPatterns
  随着设计模式逐渐普及åQŒå‡ºçŽîCº†å¦ä¸€¿Uå«åšAntiPatterns的模式类型。尽½Ž¡è®¾è®¡æ¨¡å¼æä¾›äº†å…³äºŽå¯é‡å¤çš„æœ€ä½Ïx–¹æ³•的专业知识åQŒä½†æ˜¯AntiPatterns通常描述应当避免的重复行为。AntiPatterns 验证了这æ ïLš„事实åQšåšé”™äº‹æƒ…和办对事情的äh一样多ã€?BR>  本节ž®†æŽ¢è®¨è®¾è®¡æ¨¡å¼é‡‡ç”¨ä¸­çš„AntiPatterns。了解这些AntiPatterns可以帮助您避免设计模式采用中的缺陗÷€‚å¦‚åŒè®¾è®¡æ¨¡å¼ä¸€æ øP¼Œåœ¨ä»–们提供了一些远见或者他们是一些非常熟悉的环境æ—Óž¼Œåœ¨ä»–ä»¬å¯ä»¥äØ“æ‚¨çš„¾léªŒæ·ÕdŠ è‰²å½©å’Œä‹É您不再感到孤独时åQŒæ­¤å¤„çš„AntiPatterns是一个全新的概念。如果您想阅è¯À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员通过包括设计模式的最佛_®žè·‰|¥æ”¹è¿›™å¹ç›®çš„æÍæœ›ã€‚另一¿Uæ˜¯å¼€å‘äh员天生的好奇心驱使他利用˜q™ä¸ª™å¹ç›®æ¥ç ”½I¶è®¾è®¡æ¨¡å¼ã€?BR>  推荐的解å†Ïx–¹æ¡ˆï¼š™å¹ç›®ä¸­åº”用了所有知名的设计模式。设计模式手册生成一份清单,而目标是可以核对所有的设计模式ã€?BR>  产生的语境:™å¹ç›®å›¢é˜Ÿå’Œäº¤ä»˜çš„应用½E‹åºç”׃ºŽä¸è‡ªç„¶åœ°å¼•入太多设计模式而遭受损失。这ž®±å¯¼è‡´è®¾è®¡å’Œå¼€å‘非常复杂。这¿Uä¸å¿…要的复杂性会从已¾lå®Œæˆçš„工作量、开发团队了解发生事情的能力、应用程序的实际性能和功能的正确性等斚w¢å½±å“å¼€å‘成果ã€?BR>  设计基本原理åQ?/B>设计模式是专业知识的主要来源。尽½Ž¡ä‹É用他们的效果很好åQŒä½†æ˜¯å…¨éƒ¨ä‹É用他们就未必也是好的ã€?BR>实际解决æ–ÒŽ¡ˆåQšè®¾è®¡æ¨¡å¼çš„æè¿°åŒ…含了ä‹É用模式的目标语境。必™å»è€ƒè™‘如何¼‹®ä¿è®¾è®¡æ¨¡å¼åŒšw…™å¹ç›®ã€‚第二,设计模式不是来源于当某äh阅读了一本设计模式的著作后,问:“我可以把这个设计模式ä‹É用在什么地方?”而是来源于某人寻扑ַ²å‘现问题的解å†Ïx–¹æ¡ˆã€?BR>
Developer/Project AntiPattern的实�/B>
  (也称为:Design pattern xyz? YeahåQŒæˆ‘们有10ä¸?
  问题åQ?/B>在项目中或者项目之间控制设计模式的实现ã€?BR>  应用åQ?/B>broad exposureå’Œisolated use设计模式都从解决˜q™ç§çŽ¯å¢ƒä¸­å—ç›Šã€‚ä½†æ˜¯ï¼Œbroad exposure设计模式无疑控制了实现ã€?BR>  语境åQ?/B>开发团队将设计模式¾l“合到项目中。团队由许多¾léªŒä¸°å¯Œçš„开发äh员组成,他们知道应该什么时候ä‹É用设计模式。所以会正确的设计模式。如果涉及到多个™å¹ç›®åQŒé¡¹ç›®ä¹‹é—´æ²¡æœ‰è®¾è®¡æ¨¡å¼å®žçŽ°å…±äº«ã€?BR>  动力åQ?/B>最¾lˆæœŸé™æ—¥ç›ŠäÍ˜q‘,团队成员工作效率很高。重æ–îC‹É用实çŽîC¼šå½±å“å›¢é˜Ÿæ•ˆçŽ‡ã€‚å‡è®¾ä»–ä»¬éƒ½æ˜¯ä¸“å®Óž¼Œä»–们的实现都非常优秀。在多项目情况中åQŒè·¨å›¢é˜Ÿé€šä¿¡å’Œä»£ç å…±äº«è¦ä¹ˆæ²¡æœ‰è¢«è€ƒè™‘åQŒè¦ä¹ˆè¢«ä½œäØ“˜q›åº¦è¡¨ä¸­çš„æ½œåœ¨åª„响被排除ã€?BR>  推荐的解å†Ïx–¹æ¡ˆï¼šå›¢é˜Ÿå¯ä»¥æ ÒŽ®éœ€è¦å•独包含和实现设计模式ã€?BR>  产生的语境:即ä‹É使用了正¼‹®çš„设计模式åQŒä½†æ˜¯ä»–们是以很多不同的方式实现的。在限制集成和重æ–îC‹É用成果的实现之间存在不兼宏V€‚很多不必要的时间和工作被花费在¾l´æŠ¤ã€è°ƒè¯•和扩展各种实现上。最¾lˆï¼Œå„种实现都将被统一ã€?BR>  设计基本原理åQ?/B>应当允许专家成员独立工作。只要所包含的设计模式èƒö够好åQŒå°±ä¸éœ€è¦å…±äº«å®žçްã€?BR>  实际解决æ–ÒŽ¡ˆåQ?/B>开发团队应当协调设计模式的使用。共享设计模式的公共实现可在ž®†æ¥é™ä½Žæˆæœ¬åQŒä½†æ˜¯æ›´é‡è¦çš„æ˜¯åQŒå®ƒä½¿å¼€å‘äh员之间互相兼宏V€‚如果需要,˜q™ç§å…׃ín可以被限制到划归先前讨论的broad exposure设计模式内。重用实现在™å¹ç›®é—´ä¹Ÿæžæœ‰ä»·å€û|¼Œž®¤å…¶åœ¨æœªæ¥å°†è¦é›†æˆçš„æ—¶å€™ã€?BR>
设计模式采用中IDE的角�/B>
  IDE在ç‘ô¾l­å‘展和提供更多的功能。最初的IDE¾l„成了一¿Uç¼–辑环境和一些调试工兗÷€‚现在,他们通常包含设计环境、审计工兗÷€é…¾|®ç®¡ç†ç³»¾lŸé›†æˆç­‰½{‰ã€‚随着IDE不断扩展范围åQŒéœ€è¦ç¡®è®¤ä»–们在设计模式实现中的角色。诚ç„Óž¼Œè®¾è®¡æ¨¡å¼åœ¨å¼€å‘语­a€ä¸­å®žçŽŽÍ¼Œè€ŒIDE可以用于¾~–辑源代码。但是,IDE可以扮演其他的角色吗?
  一些IDEå…ähœ‰ä¸‹æ‹‰èœå•åQŒä‹É您能够选择应用½E‹åºä¸­åŒ…括的设计模式。虽然这可以加快设计模式的ä‹É用,但是它只会导致更快地¾~–写出极差的代码。评估这个特性需要记住几个因素ã€?BR>  ½W¬ä¸€åQŒè®¾è®¡æ¨¡å¼åœ¨æŠ½è±¡ä¸­æ˜q°é—®é¢˜ï¼Œòq‰™œ€è¦ä¸€äº›è¯‘码来辑ֈ°æ­£ç¡®çš„实现。但是,他们常常包含“示例实玎ͼˆsample implementationåQ‰â€ï¼Œòq¶ä¸”IDE正是ž®†è¿™¿Uç¤ºä¾‹ç±»¾l“构插入到应用程序中。这很可能不是所需要的实现åQŒåƈ且把他们攑ֈ°åº”用½E‹åºä¸­å°†å¸¦æ¥æ›´å¤šçš„困惑,以及需要更多的¾~–辑和重构工作而不是思考最初的实现ã€?BR>  ½W¬äºŒåQŒå’ŒIDE拖放设计模式æ–ÒŽ³•有关的另一个问题是前面讨论的两¿UAntiPatterns。加快设计模式的实现很可能会产生大量的设计模式应用,以及同一设计模式的多¿Uç‰ˆæœ¬ï¼Œè€Œä¸æ˜¯è§£å†³ä“Q意问题的版本ã€?BR>  设计模式面äÍ的挑战不仅仅是得åˆîC¸€‹Æ¡å¿«é€Ÿå®žçŽŽÍ¼Œè€Œæ˜¯¼‹®å®šä½¿ç”¨äº†æ­£¼‹®çš„实现åQŒä»¥åŠæœºæž„中已有的一个完¾ŸŽçš„实现ã€?BR>
BEA WebLogic Workshop 8.1和设计模�/B>
  您可能是一位BEAçš„å®¢æˆøP¼Œå¦‚果您正在阅è¯ÀLœ¬æ–‡ï¼Œæ‚¨å¯èƒ½æƒ³çŸ¥é“æ–°çš„BEA WebLogic Workshop 8.1是如何媄响您的设计模式考虑的。首先,WebLogic Workshop是IDEåQŒå› æ­¤å‰é¢æœ‰å…³IDE的章节同样适用。对˜q™äº›è®¨è®ºæ„Ÿå…´­‘£çš„Workshop的两个额外方面是控äšg和预实现的设计模式ã€?
  WebLogic Workshop Controls是打包功能的一¿Uæ–¹æ³•,可以è½ÀL¾ž®†å…¶åŒ…含åˆîC‹É用Workshop IDE的应用程序中。打包包括IDEå¿…éœ€çš„å¯è§†å…ƒç´ ã€è¿è¡Œæ—¶è¡ŒäØ“ã€è¦æ±‚çš„é…ç½®½{‰ç­‰ã€‚控件是如何影响设计模式应用的呢åQŸè¿˜è®°å¾—è®¾è®¡æ¨¡å¼åœ¨å‰é¢åˆ’åˆ†äØ“isolated useå’Œbroad exposure吗?划分到isolated use¾cȝš„设计模式可能被打包成 Workshop Controlsã€‚æŠŠè®¾è®¡æ¨¡å¼ä½œäØ“æŽ§äšg打包可ä‹É Workshop IDE的其他用户共享实玎ͼŒä»Žè€Œé¿å…äº†æ¯ä¸€ä¸ªDeveloper/Project AntiPattern中的实现ã€?BR>  您可能想知道ä¸ÞZ»€ä¹ˆbroad exposure设计模式ä¸ÞZ»€ä¹ˆä¸å¯ä»¥ä½œäؓ控äšg实现。原因是broad exposureè®¾è®¡æ¨¡å¼å¯ÆD‡´åˆ›å¾äº†è®¸å¤šå…¶ä»–类或者独立于其他应用½E‹åºã€‚è¿™¿Uæƒ…况就不适合控äšg的即插即用方面。broad exposure设计模式的采用应当三思而后行,一旦采用就不能è½ÀL˜“取消。这些要求不½W¦åˆWebLogic Workshop Control的目标ã€?BR>  WebLogic Workshop˜q˜å…·æœ‰å¾ˆå¤šé¢„实现设计模式åQŒå¦‚Pageflow和用æˆähŽ¥å£ç»“æž„ã€‚åœ¨Workshop 中,您可以创建JSP和定义Pageflow来控制Web应用½E‹åº™åµé¢ä¹‹é—´çš„定位。在˜q™ç§æƒ…况下,WebLogic Workshop使用‹¹è¡Œçš„Apache Struts 表现层框架。Workshop的这个方面(使用 StrutsåQ‰æä¾›äº†ä¸€¿UModel-View-ControlleråQˆMVCåQ‰è®¾è®¡æ¨¡å¼å®žçŽŽÍ¼Œæ„å‘³ç€ä¸ç”¨åˆ›å¾è‡ªå·±çš„MVC实现。Workshop包含的其他功能很可能替代您自å·Þqš„设计模式实现。尽½Ž¡ä¸€äº›è®¾è®¡æ¨¡å¼å®žçŽ°çš„å¼€ç›’å³ç”¨å¾ˆå¥½ï¼Œä½†æ˜¯åº”å½“éªŒè¯ä¸ä»…å®žçŽ°è€Œä¸”å®žçŽ°åˆ›å¾çš„WebLogicä»ÖM½•依从性也非常合适ã€?BR>
成功采用设计模式的三个步�/B>
  如何把设计模式的采用和日益äÍ˜q‘的最后期限、紧¾~©çš„预算和很多公司现有的有限团队资源相结合?以下是成功制订设计模式的三个步骤ã€?BR>
强大的通信和培�/B>
  许多机构拥有领先技术,可能正式通过了设计师论坛的论证或者非正式的公认专家。这些领先厂商将推广设计模式采用中的开æ”ùN€šä¿¡åQŒåƈž®†åŸ¹è®­å¼€å‘具体设计模式的团队。通信应当跨开发团队和™å¹ç›®ä»¥ä¾¿é¢„先防止采用竖井和多¿UæƒŸä¸€çš„实玎ͼˆè°¨è®°æ¯ä¸ªDeveloper/Project AntiPattern的实玎ͼ‰ã€‚培训可以采用正式的internal lunch-and-learns、正式的internal class或者派一些员工参加外部培训。这些培训方式将促进正确的设计模式应用程序。如果仅有极ž®‘的观众能够参加培训åQŒæœ€ä½³çš„候选äh是那些感觉适合在回来后能够培训其同事的人ã€?BR>
设计模式采用指导
  设计模式可用于ä‹É™å¹ç›®å—益åQŒä½†æ˜¯ä»–ä»¬ä¹Ÿå¯èƒ½å› äØ“è¯¯ç”¨è€Œå¯¹åº”ç”¨½E‹åºé€ æˆæŸå®³ã€‚应当鼓励采用他们,但是对其的采用应当受到审阅和验证。设计模式可以包含在设计和开发过½E‹ä¸­ã€‚在ä»ÖM½•一¿Uæƒ…况中åQŒè®¾è®¡æ¨¡å¼çš„使用应当由审阅者确认和验证。在审阅˜q‡ç¨‹ä¸­è¿˜å¯èƒ½ä¼šé‡åˆ°è¿™æ ïLš„æƒ…况åQŒé¢å¤–的设计模式不适用于最初包括的地方。即使环境中没有˜q›è¡Œæ­£å¼çš„审阅,˜q™ä¸€æ­¥éª¤ä¹Ÿå¯ä»¥é€šè¿‡åŒäº‹å®¡é˜…或者团队讨论来完成。这一步骤中的审阅者要么是主要团队的成员,要么与他们徏立开æ”ùN€šä¿¡ã€?
  指导采用对于broad exposure¾cÕdˆ«çš„设计模式非常关键。这些设计模式具有很多相关的风险åQŒå› ä¸ÞZ»–们将创徏依赖性。这些依赖性可能在一些对象类中,例如åQŒåªå·¥ä½œåœ¨æ›´åŠ å¹¿æ³›çš„DAO设计模式实现范围中的数据讉K—®å¯¹è±¡åQˆDAOåQ‰ã€æˆ–者跨应用½E‹åºè¾¹ç•ŒåQˆå¦‚使用Value Object设计模式在应用程序和应用½E‹åºå±‚之间传输数据)。这些设计模式也可以由项目中的其他äh或者不同项目的人实玎ͼŒè€Œä¸”实现应当重新使用åQŒä¸åŒäºŽåˆ›å¾å¦ä¸€¿Uç‹¬ç‰¹çš„实现ã€?BR>
重用实现,不只是设计模�/B>
ã€€ã€€åªè¦åœ¨åˆ›å»ø™‡ªå·Þqš„设计模式实现中有一定的满èƒöåQŒå›¢é˜Ÿå’Œå…¬å¸ž®±å¯ä»¥åœ¨é‡ç”¨å‘生在代码层æ—Óž¼Œè€Œä¸æ˜¯è®¾è®¡åˆ›æ„å±‚时获得更多益处。ä‹É企业èŽïL›Šçš„æœ€åˆè®¾è®¡æ¨¡å¼æ˜¯æ”¹è¿›çš„å®žçŽ°ã€‚ä½†æ˜¯ï¼ŒçœŸæ­£çš„ç›®æ ‡æ˜¯é‡ç”¨å®žçŽ°ã€‚é‡ç”¨å®žçŽ°å°†å¯ÆD‡´åQša)其他可重用的¾c»ï¼ˆå–决于公共实玎ͼ‰åQ›b)¾~©çŸ­å¼€å‘时间和降低成本åQ›c)¾~©çŸ­¾l´æŠ¤æ—‰™—´å’Œé™ä½Žæˆæœ¬ï¼›d)在应用程序之间和内部è½ÀL¾é›†æˆã€?BR>  ˜q™ç§é‡ç”¨å¯¹broad exposure设计模式非常重要åQˆæœ‰æ—¶æ˜¯åŸºæœ¬çš„)。这些设计模式创å»ÞZº†å¤–部依赖性(集成ž®†ä»Žå…¬å…±å®žçŽ°ä¸­å—ç›Šï¼‰æˆ–è€…äñ”生全部的自定义类库(如果有公共基¼‹€ž®†å¯é‡ç”¨åQ‰ã€‚isolated use设计模式也可以从重用中获益,但是如果他们是根据具体情况定制的åQŒä»–们就非常难以重用ã€?BR>  有时您可能会问自己:“如果重用比较好åQŒäؓ什么设计模式和可以重用的实çŽîC¸å¯ä»¥ä¸€åŒåº”用呢åQŸâ€åœ¨æˆ‘ä»¬è®¨è®ºè®¾è®¡æ¨¡å¼å¦‚ä½•ä½¿æ›´å¤šè¯»è€…èŽ·ç›Šçš„æ—¶å€™æ‰ä¼šè®¨è®ø™¿™ä¸ªé—®é¢˜ã€‚如果可能,如果已经预定义了实现åQŒé‚£ä¹ˆè¾¾åˆ°å¹¿æ³›é€‚用性这个目标就会非常困难。然而,一旦设计模式被应用到特ŒDŠçš„问题域或者技术基¼‹€è®¾æ–½ä¸­ï¼Œé‚£ä¹ˆž®±å¯ä»¥é‡ç”¨åœ¨è¯¥çŽ¯å¢ƒä¸­äº§ç”Ÿçš„å®žçŽ°ã€?BR>
架构中的设计模式
  ˜q™çœ‹èµäh¥åƒæ˜¯ä¸€ä»¶å¯æ€•çš„ä»ÕdŠ¡åQŒéœ€è¦æŽŒæ¡è®¾è®¡æ¨¡å¼å¦‚何应用在实际情况中,如何构徏优质的实玎ͼŒä»¥åŠå¦‚何促进重用实现。完成该ä»ÕdŠ¡çš„æ–¹æ³•ä¹‹ä¸€ž®±æ˜¯åœ¨çŽ¯å¢ƒä¸­å¼•å…¥åº”ç”¨½E‹åºæž¶æž„。应用程序架构提供了应用½E‹åºéœ€è¦çš„¾l“æž„åQŒä»Žè€Œä‹É开发团队可以关注应用程序的域逻辑。这包含了已实现的设计模式。除了重用设计模式概忉|ˆ–者单个实çŽîC¹‹å¤–,可以在多个项目和应用½E‹åºä¹‹é—´é‡ç”¨æž¶æž„。这¿Uå…±äº«çš„公共实现¼‹®ä¿äº†å…¼å®ÒŽ€§ï¼Œòq¶äؓ开发和¾l´æŠ¤å¤šç§ä¸åŒçš„实现提供了一¿Uä½Žæˆæœ¬æ›¿ä»£æ–ÒŽ¡ˆã€‚å…¼å®ÒŽ€§æä¾›äº†é‡æ–°ä½¿ç”¨éœ€è¦çš„æŠ€æœ¯åŸº¼‹€ã€‚没有èƒö够的½‹‡å¹…在这里深入讨论架构的其他重要品质åQŒå¦‚˜qè¡Œæ—¶ç›‘‹¹‹å’Œ½Ž¡ç†ã€å¯é…ç½®åº”用½E‹åºé€»è¾‘和适应性行为等。您可以从Carnegie Mellon Software Engineering Institute (www.sei.cmu.edu/ata/ata_init.html) 中学习到更多有关架构的知识ã€?BR>
¾l“束è¯?/B>
  设计模式是一¿Uä×o人惊异的资源åQŒåº”该ä‹É用他以增加您的优åŠÑ€‚虽然设计模式提供了可重用的概念åQŒä½†æ˜¯é¢ä¸´çš„æŒ‘战是决定ä‹É用哪一¿Uè®¾è®¡æ¨¡å¼å’Œè‡´åŠ›äºŽå¯ä»¥é‡ç”¨çš„å®žçŽ°ã€‚é€šè¿‡äº†è§£é‡‡ç”¨è®¾è®¡æ¨¡å¼ä¸­ä¼šäº§ç”Ÿçš„é£Žé™©ï¼Œž®±å¯ä»¥åœ¨¾l§ç®‹å­¦ä¹ å’Œå®žçŽ°æ›´å¤šè®¾è®¡æ¨¡å¼æ—¶é¿å…é£Žé™©ã€?BR>  按照本文概述的步骤会产生一个流½E‹ï¼Œç”¨äºŽåœ¨å›¢é˜Ÿå’Œæœºæž„中推òq¿æˆåŠŸçš„è®¾è®¡æ¨¡å¼é‡‡ç”¨ã€?BR>
参考资�/B>

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

关于作è€?BR>Walter Hurst是Wakesoft的奠åŸÞZh和首席技术官。他在尖端技术领域工作了十年。成立Wakesoft 之前åQŒWalter是一名独立咨询师åQŒä¸»è¦ä‹É用Wakesoft技术的早期版本为客æˆähä¾›äº’联网解决æ–ÒŽ¡ˆã€‚在此之前,Walter是Xpedior的技术设计师åQŒè´Ÿè´£é¢†å¯¼internal efforts开发实现在多个客户™å¹ç›®ä¸­çš„应用½E‹åºæž¶æž„。在加入Xpedior之前åQŒWalter是Andersen Consulting?Center战略技术方面的高çñ”咨询师。在AndersenåQŒWalter为多家胦å¯?00客户领导Enterprise™å¹ç›®ã€‚Walter在密歇根州大学获得计½Ž—机工程学士学位ã€?/P>

]]>
[设计模式]关于23¿Uè®¾è®¡æ¨¡å¼çš„æœ‰è¶£è§è§£(è½?http://www.aygfsteel.com/jackybu/articles/2895.htmlè¾?/dc:creator>è¾?/author>Thu, 07 Apr 2005 02:42:00 GMThttp://www.aygfsteel.com/jackybu/articles/2895.htmlhttp://www.aygfsteel.com/jackybu/comments/2895.htmlhttp://www.aygfsteel.com/jackybu/articles/2895.html#Feedback0http://www.aygfsteel.com/jackybu/comments/commentRss/2895.htmlhttp://www.aygfsteel.com/jackybu/services/trackbacks/2895.html创徏型模å¼?/STRONG>

1、FACTORY—追MMž®‘不了请吃饭了,麦当劳的鸡翅和肯德基的鸡¾˜…都是MM爱吃的东西,虽然口味有所不同åQŒä½†ä¸ç®¡ä½ å¸¦MM去麦当劳或肯德基åQŒåª½Ž¡å‘服务员说“来四个鸡翅”就行了。麦当劳和肯德基ž®±æ˜¯ç”Ÿäñ”鸡翅的Factory

工厂模式åQšå®¢æˆïL±»å’Œå·¥åŽ‚ç±»åˆ†å¼€ã€‚æ¶ˆè´¹è€…ä“Q何时候需要某¿Uäñ”品,只需向工厂请求即可。消费者无™åÖM¿®æ”¹å°±å¯ä»¥æŽ¥çº³æ–îCñ”品。缺ç‚ÒŽ˜¯å½“äñ”品修æ”ÒŽ—¶åQŒå·¥åŽ‚ç±»ä¹Ÿè¦åšç›¸åº”çš„ä¿®æ”¹ã€‚å¦‚åQšå¦‚何创建及如何向客æˆïL«¯æä¾›ã€?

2、BUILDER—MM最爱听的就是“我çˆ×ƒ½ â€è¿™å¥è¯äº†ï¼Œè§åˆ°ä¸åŒåœ°æ–¹çš„MM,要能够用她们的方­a€è·Ÿå¥¹è¯´è¿™å¥è¯å“¦ï¼Œæˆ‘有一个多¿Uè¯­­a€¾˜»è¯‘机,上面每种语言都有一个按键,见到MM我只要按对应的键åQŒå®ƒž®Þpƒ½å¤Ÿç”¨ç›¸åº”的语­a€è¯´å‡ºâ€œæˆ‘çˆ×ƒ½ â€è¿™å¥è¯äº†ï¼Œå›½å¤–çš„MM也可以轻松搞掂,˜q™å°±æ˜¯æˆ‘的“我çˆ×ƒ½ â€builder。(˜q™ä¸€å®šæ¯”¾ŸŽå†›åœ¨ä¼Šæ‹‰å…‹ç”¨çš„¾˜»è¯‘机好卖)

建造模式:ž®†äñ”品的内部表象和äñ”品的生成˜q‡ç¨‹åˆ†å‰²å¼€æ¥ï¼Œä»Žè€Œä‹É一个徏造过½E‹ç”Ÿæˆå…·æœ‰ä¸åŒçš„内部表象的äñ”品对象。徏造模式ä‹Éå¾—äñ”品内部表象可以独立的变化åQŒå®¢æˆ·ä¸å¿…知道äñ”品内部组成的¾l†èŠ‚ã€‚å¾é€ æ¨¡å¼å¯ä»¥å¼ºåˆ¶å®žè¡Œä¸€¿Uåˆ†æ­¥éª¤˜q›è¡Œçš„徏造过½E‹ã€?

3、FACTORY METHOD—请MM去麦当劳吃汉堡,不同的MM有不同的口味åQŒè¦æ¯ä¸ªéƒ½è®°ä½æ˜¯ä¸€ä»¶çƒ¦äººçš„事情åQŒæˆ‘一般采用Factory Method模式åQŒå¸¦ç€MM到服务员那儿åQŒè¯´â€œè¦ä¸€ä¸ªæ±‰å ¡â€ï¼Œå…·ä½“要什么样的汉堡呢åQŒè®©MM直接跟服务员说就行了ã€?

工厂æ–ÒŽ³•模式åQšæ ¸å¿ƒå·¥åŽ‚ç±»ä¸å†è´Ÿè´£æ‰€æœ‰äñ”品的创徏åQŒè€Œæ˜¯ž®†å…·ä½“创建的工作交给子类åŽÕdšåQŒæˆä¸ÞZ¸€ä¸ªæŠ½è±¡å·¥åŽ‚è§’è‰ÔŒ¼Œä»…负责给出具体工厂类必须实现的接口,而不接触哪一个äñ”品类应当被实例化˜q™ç§¾l†èŠ‚ã€?

4、PROTOTYPE—跟MM用QQ聊天åQŒä¸€å®šè¦è¯´äº›æ·±æƒ…的话语了åQŒæˆ‘搜集了好多肉éºÈš„情话åQŒéœ€è¦æ—¶åªè¦copy出来攑ֈ°QQ里面ž®Þp¡Œäº†ï¼Œ˜q™å°±æ˜¯æˆ‘的情话prototype了。(100块钱一份,你要不要åQ?

原始模型模式åQšé€šè¿‡¾l™å‡ºä¸€ä¸ªåŽŸåž‹å¯¹è±¡æ¥æŒ‡æ˜Žæ‰€è¦åˆ›å»ºçš„å¯¹è±¡çš„ç±»åž‹ï¼Œç„¶åŽç”¨å¤åˆ¶è¿™ä¸ªåŽŸåž‹å¯¹è±¡çš„æ–ÒŽ³•创徏出更多同¾cÕdž‹çš„对象。原始模型模式允许动态的增加或减ž®‘äñ”品类åQŒäñ”品类不需要非得有ä»ÖM½•事先¼‹®å®šçš„ç­‰¾U§ç»“构,原始模型模式适用于ä“Q何的½{‰çñ”¾l“构。缺ç‚ÒŽ˜¯æ¯ä¸€ä¸ªç±»éƒ½å¿…™å»é…å¤‡ä¸€ä¸ªå…‹éš†æ–¹æ³•ã€?

5、SINGLETON—俺æœ?个漂亮的老婆åQŒå¥¹ä»¬çš„老公都是我,我就是我们家里的老公SigletonåQŒå¥¹ä»¬åªè¦è¯´é““老公”,都是指的同一个ähåQŒé‚£ž®±æ˜¯æˆ?刚才做了个梦啦,哪有˜q™ä¹ˆå¥½çš„äº?

单例模式åQšå•ä¾‹æ¨¡å¼ç¡®ä¿æŸä¸€ä¸ªç±»åªæœ‰ä¸€ä¸ªå®žä¾‹ï¼Œè€Œä¸”è‡ªè¡Œå®žä¾‹åŒ–åÆˆå‘æ•´ä¸ªç³»¾lŸæä¾›è¿™ä¸ªå®žä¾‹å•例模式。单例模式只应在有真正的“单一实例”的需求时才可使用ã€?

¾l“构型模å¼?/STRONG>

6、ADAPTER—在朋友聚会上碰åˆîCº†ä¸€ä¸ªç¾Žå¥³SarahåQŒä»Žé¦™æ¸¯æ¥çš„åQŒå¯æˆ‘不会说¾_¤è¯­åQŒå¥¹ä¸ä¼šè¯´æ™®é€šè¯åQŒåªå¥½æ±‚助于我的朋友kent了,他作为我和Sarah之间的AdapteråQŒè®©æˆ‘å’ŒSarahå¯ä»¥ç›æ€º’交谈äº?也不知道他会不会耍我)

适配器(变压器)模式åQšæŠŠä¸€ä¸ªç±»çš„æŽ¥å£å˜æ¢æˆå®¢æˆ·ç«¯æ‰€æœŸå¾…çš„å¦ä¸€¿UæŽ¥å£ï¼Œä»Žè€Œä‹É原本因接口原因不匚w…è€Œæ— æ³•一起工作的两个¾c»èƒ½å¤Ÿä¸€èµ·å·¥ä½œã€‚适配¾cÕd¯ä»¥æ ¹æ®å‚æ•°è¿”˜q˜ä¸€ä¸ªåˆé€‚的实例¾l™å®¢æˆïL«¯ã€?

7、BRIDGE—早上碰到MMåQŒè¦è¯´æ—©ä¸Šå¥½åQŒæ™šä¸Šç¢°åˆ°MMåQŒè¦è¯´æ™šä¸Šå¥½åQ›ç¢°åˆ°MM½I¿äº†ä»¶æ–°è¡£æœåQŒè¦è¯´ä½ çš„衣服好漂亮哦,¼„°åˆ°MM新做的发型,要说你的头发好漂亮哦。不要问我“早上碰到MM新做了个发型怎么说”这¿Ué—®é¢˜ï¼Œè‡ªå·±ç”¨BRIDGE¾l„合一下不ž®Þp¡Œäº?

桥梁模式åQšå°†æŠ½è±¡åŒ–与实现化脱耦,使得二者可以独立的变化åQŒä¹Ÿž®±æ˜¯è¯´å°†ä»–们之间的强兌™”变成弱关联,也就是指在一个èÊYä»¶ç³»¾lŸçš„æŠ½è±¡åŒ–和实现化之间ä‹É用组å?聚合关系而不是ç‘ô承关¾p»ï¼Œä»Žè€Œä‹É两者可以独立的变化ã€?

8、COMPOSITE—Mary今天˜q‡ç”Ÿæ—¥ã€‚“我˜q‡ç”Ÿæ—¥ï¼Œä½ è¦é€æˆ‘一件礼物。”“嗯åQŒå¥½å§ï¼ŒåŽÕd•†åº—,你自己挑。”“这件T恤挺漂亮åQŒä¹°åQŒè¿™æ¡è£™å­å¥½çœ‹ï¼Œä¹ŽÍ¼Œ˜q™ä¸ªåŒ…也不错åQŒä¹°ã€‚”“喂åQŒä¹°äº†ä¸‰ä»¶äº†å‘€åQŒæˆ‘只答应送一件礼物的哦。”“什么呀åQŒT恤加裙子加包包,正好配成一套呀åQŒå°å§ï¼ŒéºÈƒ¦ä½ åŒ…èµäh¥ã€‚”“……”,MM都会用Composite模式了,你会了没有?

合成模式åQšåˆæˆæ¨¡å¼å°†å¯¹è±¡¾l„织到树¾l“构中,可以用来描述整体与部分的关系。合成模式就是一个处理对象的树结构的模式。合成模式把部分与整体的关系用树¾l“构表示出来。合成模式ä‹É得客æˆïL«¯æŠŠä¸€ä¸ªä¸ªå•独的成分对象和ç”׃»–们复合而成的合成对象同½{‰çœ‹å¾…ã€?

9、DECORATOR—Mary˜q‡å®Œè½®åˆ°Sarly˜q‡ç”Ÿæ—¥ï¼Œ˜q˜æ˜¯ä¸è¦å«å¥¹è‡ªå·±æŒ‘了åQŒä¸ç„¶è¿™ä¸ªæœˆä¼™é£Ÿè´¹è‚¯å®šçŽ©å®Œï¼Œæ‹¿å‡ºæˆ‘åŽ»òq´åœ¨åŽå±±™å¶ä¸Šç…§çš„照片åQŒåœ¨èƒŒé¢å†™ä¸Šâ€œæœ€å¥½çš„的礼物,ž®±æ˜¯çˆ×ƒ½ çš„Fita”,再到街上½C¼å“åº—买了个像框åQˆå–½C¼å“çš„MM也很漂亮哦)åQŒå†æ‰ùNš”壁搞¾ŸŽæœ¯è®¾è®¡çš„Mike设计了一个漂亮的盒子装è“v来……,我们都是DecoratoråQŒæœ€¾lˆéƒ½åœ¨ä¿®é¥°æˆ‘˜q™ä¸ªäººå‘€åQŒæ€Žä¹ˆæ øP¼Œçœ‹æ‡‚了吗åQ?

装饰模式åQšè£…饰模式以对客æˆïL«¯é€æ˜Žçš„æ–¹å¼æ‰©å±•对象的功能åQŒæ˜¯¾l§æ‰¿å…³ç³»çš„一个替代方案,提供比ç‘ô承更多的灉|´»æ€§ã€‚动态给一个对象增加功能,˜q™äº›åŠŸèƒ½å¯ä»¥å†åŠ¨æ€çš„æ’¤æ¶ˆã€‚å¢žåŠ ç”±ä¸€äº›åŸºæœ¬åŠŸèƒ½çš„æŽ’åˆ—¾l„合而äñ”生的非常大量的功能ã€?

10、FACADE—我有一个专业的Nikon相机åQŒæˆ‘ž®±å–œ‹Æ¢è‡ªå·±æ‰‹åŠ¨è°ƒå…‰åœˆã€å¿«é—¨ï¼Œ˜q™æ ·ç…§å‡ºæ¥çš„照片才专业,但MM可不懂这些,教了半天也不会。幸好相机有Facade设计模式åQŒæŠŠç›¸æœºè°ƒæ•´åˆ°è‡ªåŠ¨æ¡£åQŒåªè¦å¯¹å‡†ç›®æ ‡æŒ‰å¿«é—¨ž®Þp¡Œäº†ï¼Œä¸€åˆ‡ç”±ç›¸æœºè‡ªåŠ¨è°ƒæ•´åQŒè¿™æ ·MM也可以用˜q™ä¸ªç›¸æœº¾l™æˆ‘拍张照片了ã€?

门面模式åQšå¤–部与一个子¾pȝ»Ÿçš„通信必须通过一个统一的门面对象进行。门面模式提供一个高层次的接口,使得子系¾lŸæ›´æ˜“于使用。每一个子¾pȝ»Ÿåªæœ‰ä¸€ä¸ªé—¨é¢ç±»åQŒè€Œä¸”此门面类只有一个实例,也就是说它是一个单例模式。但整个¾pȝ»Ÿå¯ä»¥æœ‰å¤šä¸ªé—¨é¢ç±»ã€?

11、FLYWEIGHT—每天跟MM发短信,手指都篏æ­ÖMº†åQŒæœ€˜q‘买了个新手机,可以把一些常用的句子存在手机里,要用的时候,直接拿出来,在前面加上MM的名字就可以发送了åQŒå†ä¸ç”¨ä¸€ä¸ªå­—一个字敲了。共享的句子ž®±æ˜¯FlyweightåQŒMM的名字就是提取出来的外部特征åQŒæ ¹æ®ä¸Šä¸‹æ–‡æƒ…况使用ã€?

享元模式åQšFLYWEIGHT在拳å‡ÀL¯”赛中指最轻量¾U§ã€‚äín元模式以å…׃ín的方式高效的支持大量的细¾_’度对象。äín元模式能做到å…׃ín的关键是区分内蕴状态和外蕴状态。内蕴状态存储在享元内部åQŒä¸ä¼šéšçŽ¯å¢ƒçš„æ”¹å˜è€Œæœ‰æ‰€ä¸åŒã€‚å¤–è•´çŠ¶æ€æ˜¯éšçŽ¯å¢ƒçš„æ”¹å˜è€Œæ”¹å˜çš„ã€‚å¤–è•´çŠ¶æ€ä¸èƒ½åª„å“å†…è•´çŠ¶æ€ï¼Œå®ƒä»¬æ˜¯ç›¸äº’ç‹¬ç«‹çš„ã€‚å°†å¯ä»¥å…׃ín的状态和不可以共享的状态从常规¾cÖM¸­åŒºåˆ†å¼€æ¥ï¼Œž®†ä¸å¯ä»¥å…׃ín的状态从¾c»é‡Œå‰”除出去。客æˆïL«¯ä¸å¯ä»¥ç›´æŽ¥åˆ›å»ø™¢«å…׃ín的对象,而应当ä‹Éç”¨ä¸€ä¸ªå·¥åŽ‚å¯¹è±¡è´Ÿè´£åˆ›å»ø™¢«å…׃ín的对象。äín元模式大òq…度的降低内存中对象的数量ã€?

12、PROXY—跟MM在网上聊天,一开头æ€ÀL˜¯â€œhi,你好â€?“你从哪儿来呀åQŸâ€â€œä½ å¤šå¤§äº†ï¼Ÿâ€â€œèín高多ž®‘å‘€åQŸâ€è¿™äº›è¯åQŒçœŸçƒ¦ähåQŒå†™ä¸ªç¨‹åºåšä¸ºæˆ‘çš„Proxy吧,凡是接收到这些话都设¾|®å¥½äº†è‡ªåŠ¨çš„å›žç­”åQŒæŽ¥æ”¶åˆ°å…¶ä»–的话时再通知我回½{”ï¼Œæ€Žä¹ˆæ øP¼Œé…·å§ã€?

代理模式åQšä»£ç†æ¨¡å¼ç»™æŸä¸€ä¸ªå¯¹è±¡æä¾›ä¸€ä¸ªä»£ç†å¯¹è±¡ï¼Œòq¶ç”±ä»£ç†å¯¹è±¡æŽ§åˆ¶å¯ÒŽºå¯¹è±¡çš„引用。代理就是一个äh或一个机构代表另一个äh或者一个机构采取行动。某些情况下åQŒå®¢æˆ·ä¸æƒÏxˆ–者不能够直接引用一个对象,代理对象可以在客户和目标对象直接起到中介的作用。客æˆïL«¯åˆ†èöLä¸å‡ºä»£ç†ä¸»é¢˜å¯¹è±¡ä¸ŽçœŸå®žä¸»é¢˜å¯¹è±¡ã€‚ä»£ç†æ¨¡å¼å¯ä»¥åÆˆä¸çŸ¥é“çœŸæ­£çš„è¢«ä»£ç†å¯¹è±¡ï¼Œè€Œä»…ä»…æŒæœ‰ä¸€ä¸ªè¢«ä»£ç†å¯¹è±¡çš„æŽ¥å£ï¼Œ˜q™æ—¶å€™ä»£ç†å¯¹è±¡ä¸èƒ½å¤Ÿåˆ›å¾è¢«ä»£ç†å¯¹è±¡ï¼Œè¢«ä»£ç†å¯¹è±¡å¿…™åÀLœ‰¾pȝ»Ÿçš„å…¶ä»–è§’è‰²ä»£ä¸ºåˆ›å»ºåÆˆä¼ å…¥ã€?

è¡ŒäØ“æ¨¡å¼

13、CHAIN OF RESPONSIBLEITY—晚上去上英语课åQŒäؓ了好开溜坐åˆîCº†æœ€åŽä¸€æŽ’,哇,前面坐了好几个漂亮的MM哎,扑ּ ¾U¸æ¡åQŒå†™ä¸Šâ€œHi,可以做我的女朋友吗?如果不愿意请向前传”,¾U¸æ¡ž®×ƒ¸€ä¸ªæŽ¥ä¸€ä¸ªçš„传上åŽÖMº†åQŒç³Ÿ¾p•,传到½W¬ä¸€æŽ’çš„MM把纸条传¾l™è€å¸ˆäº†ï¼Œå¬è¯´æ˜¯ä¸ªè€å¤„奛_‘€åQŒå¿«è·?

è´£ä“Q链模式:在责任链模式中,很多对象由每一个对象对其下家的引用而接

èµäh¥å½¢æˆä¸€æ¡é“¾ã€‚请求在˜q™ä¸ªé“¾ä¸Šä¼ é€’,直到链上的某一个对象决定处理此è¯äh±‚ã€‚å®¢æˆ·åÆˆä¸çŸ¥é“é“¾ä¸Šçš„å“ªä¸€ä¸ªå¯¹è±¡æœ€¾lˆå¤„理这个请求,¾pȝ»Ÿå¯ä»¥åœ¨ä¸å½±å“å®¢æˆ·ç«¯çš„æƒ…况下动态的重新¾l„织铑֒Œåˆ†é…è´£ä“Q。处理者有两个选择åQšæ‰¿æ‹…è´£ä»ÀLˆ–者把责ä“Q推给下家。一个请求可以最¾lˆä¸è¢«ä“Q何接收端对象所接受ã€?

14、COMMAND—俺有一个MM安™‡Œ½Ž¡å¾—特别严,没法见面åQŒåªå¥½å€ŸåŠ©äºŽå¥¹å¼Ÿå¼Ÿåœ¨æˆ‘ä»¬ä¿©ä¹‹é—´ä¼ é€ä¿¡æ¯ï¼Œå¥¹å¯¹æˆ‘æœ‰ä»€ä¹ˆæŒ‡½Cºï¼Œž®±å†™ä¸€å¼ çº¸æ¡è®©å¥¹å¼Ÿå¼Ÿå¸¦¾l™æˆ‘。这不,她弟弟又传送过来一个COMMANDåQŒäؓ了感谢他åQŒæˆ‘请他吃了¼„—杂酱面åQŒå“ªçŸ¥é“他说åQšâ€œæˆ‘同时¾l™æˆ‘姐姐三个ç”ähœ‹å‹é€COMMANDåQŒå°±æ•îC½ æœ€ž®æ°”åQŒæ‰è¯ähˆ‘吃面。”,:-(

命ä×o模式åQšå‘½ä»¤æ¨¡å¼æŠŠä¸€ä¸ªè¯·æ±‚或者操作封装到一个对象中。命令模式把发出命ä×o的责ä»Õd’Œæ‰§è¡Œå‘½ä×o的责ä»Õdˆ†å‰²å¼€åQŒå§”‹z„¡»™ä¸åŒçš„对象。命令模式允许请求的一方和发送的一方独立开来,使得è¯äh±‚的一方不必知道接收请求的一方的接口åQŒæ›´ä¸å¿…知道è¯äh±‚是怎么被接æ”Óž¼Œä»¥åŠæ“ä½œæ˜¯å¦æ‰§è¡ŒåQŒä½•时被执行以及是怎么被执行的。系¾lŸæ”¯æŒå‘½ä»¤çš„æ’¤æ¶ˆã€?

15、INTERPRETER—俺有一个《æˆöMM真经》,上面有各¿UæˆöMM的攻略,比如说去吃西˜¡çš„æ­¥éª¤ã€åŽ»çœ‹ç”µå½Þqš„æ–ÒŽ³•½{‰ç­‰åQŒè·ŸMM¾U¦ä¼šæ—Óž¼Œåªè¦åšä¸€ä¸ªInterpreteråQŒç…§ç€ä¸Šé¢çš„脚本执行就可以了ã€?

解释器模式:¾l™å®šä¸€ä¸ªè¯­­a€åŽï¼Œè§£é‡Šå™¨æ¨¡å¼å¯ä»¥å®šä¹‰å‡ºå…¶æ–‡æ³•的一¿Uè¡¨½Cºï¼Œòq¶åŒæ—¶æä¾›ä¸€ä¸ªè§£é‡Šå™¨ã€‚客æˆïL«¯å¯ä»¥ä½¿ç”¨˜q™ä¸ªè§£é‡Šå™¨æ¥è§£é‡Š˜q™ä¸ªè¯­è¨€ä¸­çš„句子。解释器模式ž®†æ˜q°æ€Žæ ·åœ¨æœ‰äº†ä¸€ä¸ªç®€å•的文法后,使用模式设计解释˜q™äº›è¯­å¥ã€‚在解释器模式里面提到的语言是指ä»ÖM½•解释器对象能够解释的ä»ÖM½•¾l„合。在解释器模式中需要定义一个代表文法的命ä×o¾cȝš„½{‰çñ”¾l“æž„åQŒä¹Ÿž®±æ˜¯ä¸€¾pÕdˆ—的组合规则。每一个命令对象都有一个解释方法,代表对命令对象的解释。命令对象的½{‰çñ”¾l“构中的对象的ä“Q何排列组合都是一个语­a€ã€?



16、ITERATOR—我çˆ×ƒ¸Šäº†MaryåQŒä¸™å¾ä¸€åˆ‡çš„向她求婚ã€?

MaryåQšâ€œæƒ³è¦æˆ‘è·Ÿä½ ¾l“婚åQŒå¾—½{”应我的条äšgâ€?

我:“什么条件我都答应,你说吧�

MaryåQšâ€œæˆ‘看上了那个一克拉的钻石â€?

我:“我乎ͼŒæˆ‘ä¹°åQŒè¿˜æœ‰å—åQŸâ€?

MaryåQšâ€œæˆ‘看上了湖边的那栋别墅â€?

我:“我乎ͼŒæˆ‘ä¹°åQŒè¿˜æœ‰å—åQŸâ€?

MaryåQšâ€œä½ çš„小弟弟必须要有50cm镎ì€?

我脑袋嗡的一壎ͼŒååœ¨æ¤…子上,一咬牙åQšâ€œæˆ‘剪,我剪åQŒè¿˜æœ‰å—åQŸâ€?

…�

˜q­ä»£å­æ¨¡å¼ï¼š˜q­ä»£å­æ¨¡å¼å¯ä»¥é¡ºåºè®¿é—®ä¸€ä¸ªèšé›†ä¸­çš„元素而不必暴露聚集的内部表象。多个对象聚在一起åŞ成的æ€ÖM½“¿UîC¹‹ä¸ø™šé›†ï¼Œèšé›†å¯¹è±¡æ˜¯èƒ½å¤ŸåŒ…容一¾l„对象的容器对象。è„P代子模式ž®†è„P代逻辑ž®è£…åˆîC¸€ä¸ªç‹¬ç«‹çš„子对象中åQŒä»Žè€Œä¸Žèšé›†æœ¬èín隔开。è„P代子模式½Ž€åŒ–了聚集的界面。每一个聚集对象都可以有一个或一个以上的˜q­ä»£å­å¯¹è±¡ï¼Œæ¯ä¸€ä¸ªè„P代子的è„P代状态可以是彼此独立的。è„P代算法可以独立于聚集角色变化ã€?

17、MEDIATOR—四个MM打麻ž®†ï¼Œç›æ€º’之间谁应该给谁多ž®‘é’±½Ž—不清楚了,òq怺å½“时我在旁边åQŒæŒ‰ç…§å„自的½{¹ç æ•°ç®—钱,赚了é’Þqš„从我˜q™é‡Œæ‹¿ï¼Œèµ”了é’Þqš„也付¾l™æˆ‘åQŒä¸€åˆ‡å°±OK啦,俺得åˆîCº†å››ä¸ªMM的电话ã€?

调停者模式:调停者模式包装了一¾pÕdˆ—å¯¹è±¡ç›æ€º’作用的方式,使得˜q™äº›å¯¹è±¡ä¸å¿…ç›æ€º’明显作用。从而ä‹É他们可以松散偶合。当某些对象之间的作用发生改变时åQŒä¸ä¼šç«‹å›_ª„å“å…¶ä»–çš„ä¸€äº›å¯¹è±¡ä¹‹é—´çš„ä½œç”¨ã€‚ä¿è¯è¿™äº›ä½œç”¨å¯ä»¥å½¼æ­¤ç‹¬ç«‹çš„å˜åŒ–ã€‚è°ƒåœè€…æ¨¡å¼å°†å¤šå¯¹å¤šçš„ç›æ€º’作用转化ä¸ÞZ¸€å¯¹å¤šçš„相互作用。调停者模式将对象的行为和协作抽象化,把对象在ž®å°ºåº¦çš„è¡ŒäØ“ä¸Šä¸Žå…¶ä»–å¯¹è±¡çš„ç›¸äº’ä½œç”¨åˆ†å¼€å¤„ç†ã€?

18、MEMENTO—同时跟几个MM聊天æ—Óž¼Œä¸€å®šè¦è®°æ¸…楚刚才跟MM说了些什么话åQŒä¸ç„¶MM发现了会不高兴的哦,òq怺æˆ‘有个备忘录åQŒåˆšæ‰ä¸Žå“ªä¸ªMM说了什么话我都拯‚´ä¸€ä»½æ”¾åˆ°å¤‡å¿˜å½•里面保存åQŒè¿™æ ·å¯ä»¥éšæ—¶å¯Ÿçœ‹ä»¥å‰çš„记录啦ã€?

备忘录模式:备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏ž®è£…的条件下åQŒå°†ä¸€ä¸ªå¯¹è±¡çš„状态捉住,òq¶å¤–部化åQŒå­˜å‚¨è“v来,从而可以在ž®†æ¥åˆé€‚的时候把˜q™ä¸ªå¯¹è±¡˜q˜åŽŸåˆ°å­˜å‚¨è“v来的状态ã€?

19、OBSERVER—想知道å’׃»¬å…¬å¸æœ€æ–°MM情报吗?加入公司的MM情报邮äšg¾l„就行了åQŒtom负责搜集情报åQŒä»–发现的新情报不用一个一个通知我们åQŒç›´æŽ¥å‘布给邮äšg¾l„ï¼Œæˆ‘ä»¬ä½œäØ“è®¢é˜…è€…ï¼ˆè§‚å¯Ÿè€…ï¼‰ž®±å¯ä»¥åŠæ—¶æ”¶åˆ°æƒ…报啦

观察者模式:观察者模式定义了一¿Uä¸€é˜Ÿå¤šçš„依赖关¾p»ï¼Œè®©å¤šä¸ªè§‚察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化æ—Óž¼Œä¼šé€šçŸ¥æ‰€æœ‰è§‚察者对象,使他们能够自动更新自己ã€?

20、STATE—跟MM交往æ—Óž¼Œä¸€å®šè¦æ³¨æ„å¥¹çš„状态哦åQŒåœ¨ä¸åŒçš„çŠ¶æ€æ—¶å¥¹çš„è¡ŒäØ“ä¼šæœ‰ä¸åŒåQŒæ¯”如你¾U¦å¥¹ä»Šå¤©æ™šä¸ŠåŽÈœ‹ç”µåª„åQŒå¯¹ä½ æ²¡å…´è¶£çš„MMž®×ƒ¼šè¯´â€œæœ‰äº‹æƒ…啦”,对你不讨厌但˜q˜æ²¡å–œæ¬¢ä¸Šçš„MMž®×ƒ¼šè¯´â€œå¥½å•Šï¼Œä¸è¿‡å¯ä»¥å¸¦ä¸Šæˆ‘同事么åQŸâ€ï¼Œå·²ç»å–œæ¬¢ä¸Šä½ çš„MMž®×ƒ¼šè¯´â€œå‡ ç‚šw’ŸåQŸçœ‹å®Œç”µå½±å†åŽÀLˆöå§æ€Žä¹ˆæ øP¼Ÿâ€ï¼Œå½“然你看电媄˜q‡ç¨‹ä¸­è¡¨çŽ°è‰¯å¥½çš„è¯ï¼Œä¹Ÿå¯ä»¥æŠŠMM的状态从不讨厌不喜欢变成喜欢哦ã€?

çŠ¶æ€æ¨¡å¼ï¼šçŠ¶æ€æ¨¡å¼å…è®æ€¸€ä¸ªå¯¹è±¡åœ¨å…¶å†…部状态改变的时候改变行为。这个对象看上去象是改变了它的类一栗÷€‚çŠ¶æ€æ¨¡å¼æŠŠæ‰€ç ”ç©¶çš„å¯¹è±¡çš„è¡ŒäØ“åŒ…è£…åœ¨ä¸åŒçš„çŠ¶æ€å¯¹è±¡é‡ŒåQŒæ¯ä¸€ä¸ªçŠ¶æ€å¯¹è±¡éƒ½å±žäºŽä¸€ä¸ªæŠ½è±¡çŠ¶æ€ç±»çš„ä¸€ä¸ªå­¾c…R€‚状态模式的意图是让一个对象在其内部状态改变的时候,其行ä¸ÞZ¹Ÿéšä¹‹æ”¹å˜ã€‚状态模式需要对每一个系¾lŸå¯èƒ½å–得的状态创立一个状态类的子¾c…R€‚当¾pȝ»Ÿçš„状态变化时åQŒç³»¾lŸä¾¿æ”¹å˜æ‰€é€‰çš„子类ã€?

21、STRATEGY—跟不同¾cÕdž‹çš„MM¾U¦ä¼šåQŒè¦ç”¨ä¸åŒçš„½{–ç•¥åQŒæœ‰çš„请电媄比较好,有的则去吃小吃效果不错,有的åŽÀL“vè¾Ò޵ªæ¼«æœ€åˆé€‚ï¼Œå•ç›®çš„éƒ½æ˜¯äØ“äº†å¾—åˆ°MM的芳心,我的˜q½MM锦囊中有好多Strategy哦ã€?

½{–略模式åQšç­–略模式针对一¾l„算法,ž®†æ¯ä¸€ä¸ªç®—法封装到å…ähœ‰å…±åŒæŽ¥å£çš„独立的¾cÖM¸­åQŒä»Žè€Œä‹É得它们可以相互替换。策略模式ä‹Éå¾—ç®—æ³•å¯ä»¥åœ¨ä¸åª„å“åˆ°å®¢æˆ·ç«¯çš„æƒ…å†µä¸‹å‘ç”Ÿå˜åŒ–ã€‚ç­–ç•¥æ¨¡å¼æŠŠè¡ŒäØ“å’ŒçŽ¯å¢ƒåˆ†å¼€ã€‚çŽ¯å¢ƒç±»è´Ÿè´£¾l´æŒå’ŒæŸ¥è¯¢è¡Œä¸ºç±»åQŒå„¿Uç®—法在具体的策略类中提供。由于算法和环境独立开来,½Ž—法的增减,修改都不会媄响到环境和客æˆïL«¯ã€?

22、TEMPLATE METHOD——看˜q‡ã€Šå¦‚何说服女生上床》这部经典文章吗åQŸå¥³ç”Ÿä»Žè®¤è¯†åˆîC¸ŠåºŠçš„不变的步骤分为åéy遇、打破僵局、展开˜q½æ±‚、接吅R€å‰æˆã€åŠ¨æ‰‹ã€çˆ±æŠšã€è¿›åŽÕd…«å¤§æ­¥éª?Template method)åQŒä½†æ¯ä¸ªæ­¥éª¤é’ˆå¯¹ä¸åŒçš„æƒ…况,都有不一æ ïLš„做法åQŒè¿™ž®Þp¦çœ‹ä½ éšæœºåº”变å•?具体实现)åQ?

模板æ–ÒŽ³•模式åQšæ¨¡æ¿æ–¹æ³•æ¨¡å¼å‡†å¤‡ä¸€ä¸ªæŠ½è±¡ç±»åQŒå°†éƒ¨åˆ†é€»è¾‘以具体方法以及具体构造子的åŞ式实玎ͼŒç„¶åŽå£°æ˜Žä¸€äº›æŠ½è±¡æ–¹æ³•来˜q«ä‹É子类实现剩余的逻辑。不同的子类可以以不同的方式实现˜q™äº›æŠ½è±¡æ–ÒŽ³•åQŒä»Žè€Œå¯¹å‰©ä½™çš„逻辑有不同的实现。先制定一个顶¾U§é€»è¾‘框架åQŒè€Œå°†é€»è¾‘的细节留¾l™å…·ä½“的子类åŽÕd®žçްã€?

23、VISITORâ€”æƒ…äºø™Š‚åˆîCº†åQŒè¦¾l™æ¯ä¸ªMM送一束鲜花和一张卡片,可是每个MM送的花都要针对她个äh的特点,每张卡片也要æ ÒŽ®ä¸ªäh的特ç‚ÒŽ¥æŒ‘,我一个äh哪搞得清楚,˜q˜æ˜¯æ‰¾èŠ±åº—è€æ¿å’Œç¤¼å“åº—è€æ¿åšä¸€ä¸‹VisitoråQŒè®©èŠ±åº—è€æ¿æ ÒŽ®MM的特炚w€‰ä¸€æŸèбåQŒè®©½C¼å“åº—老板也根据每个äh特点选一张卡åQŒè¿™æ ·å°±è½ÀL¾å¤šäº†åQ?

讉K—®è€…模式:讉K—®è€…模式的目的是封装一些施加于某种数据¾l“构元素之上的操作。一旦这些操作需要修改的话,接受˜q™ä¸ªæ“ä½œçš„æ•°æ®ç»“构可以保持不变。访问者模式适用于数据结构相å¯ÒŽœªå®šçš„¾pȝ»ŸåQŒå®ƒæŠŠæ•°æ®ç»“构和作用于结构上的操作之间的耦合解脱开åQŒä‹É得操作集合可以相对自ç”Þqš„æ¼”化。访问者模式ä‹É得增加新的操作变的很å®ÒŽ˜“åQŒå°±æ˜¯å¢žåŠ ä¸€ä¸ªæ–°çš„è®¿é—®è€…ç±»ã€‚è®¿é—®è€…æ¨¡å¼å°†æœ‰å…³çš„è¡Œä¸ºé›†ä¸­åˆ°ä¸€ä¸ªè®¿é—®è€…å¯¹è±¡ä¸­åQŒè€Œä¸æ˜¯åˆ†æ•£åˆ°ä¸€ä¸ªä¸ªçš„节点类中。当使用讉K—®è€…模式时åQŒè¦ž®†å°½å¯èƒ½å¤šçš„对象‹¹è§ˆé€»è¾‘攑֜¨è®‰K—®è€…类中,而不是放到它的子¾cÖM¸­ã€‚访问者模式可以跨˜q‡å‡ ä¸ªç±»çš„ç­‰¾U§ç»“构访问属于不同的½{‰çñ”¾l“构的成员类ã€?BR>


]]>
映射模式介绍 http://www.aygfsteel.com/jackybu/articles/1755.htmlè¾?/dc:creator>è¾?/author>Sat, 05 Mar 2005 15:07:00 GMThttp://www.aygfsteel.com/jackybu/articles/1755.htmlhttp://www.aygfsteel.com/jackybu/comments/1755.htmlhttp://www.aygfsteel.com/jackybu/articles/1755.html#Feedback0http://www.aygfsteel.com/jackybu/comments/commentRss/1755.htmlhttp://www.aygfsteel.com/jackybu/services/trackbacks/1755.html发现几篇关于对象关系映射的文章,æ€È»“了各¿Uå¯¹è±?关系的映ž®„方式和˜q™äº›æ˜ å°„方式的应用环境以及各¿Uæ˜ ž®„方式下数据讉K—®çš„æ•ˆçŽ‡ã€‚ä»‹¾lçš„很细è‡ß_¼Œå€¼å¾—一看ã€?

概述

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

对象/关系映射--¾l§æ‰¿æ¨¡å¼

对象/关系映射--å…Œ™”模式

]]>
Ö÷Õ¾Ö©Öë³ØÄ£°å£º Îå´óÁ¬³ØÊÐ| º¼½õºóÆì| ÎäÐûÏØ| ÁÖµéÏØ| ¸ÊµÂÏØ| ¾Å½­ÏØ| ÈêÑôÏØ| ±£¶¨ÊÐ| ¼Ó²éÏØ| ¶ÑÁúµÂÇìÏØ| ÜÝÆ½ÏØ| ÂÞ½­ÏØ| ÀÖÍ¤ÏØ| ¾üÊÂ| °½ººÆì| ¶«Ã÷ÏØ| ÆÕ¸ñÏØ| ÃçÀõÏØ| ¶«ÁÉÏØ| ¸ÓÓÜÏØ| °½ººÆì| ÏæÎ÷| ʯÆÁÏØ| µ±ÑôÊÐ| ËÉÔ­ÊÐ| ºìÇÅÇø| ±£¾¸ÏØ| ·±²ýÏØ| Ò¦°²ÏØ| ¬ÊÏÏØ| ´óʯÇÅÊÐ| É̶¼ÏØ| ±£¾¸ÏØ| ¼âÔúÏØ| Ó¯½­ÏØ| ½­¶¼ÊÐ| Ú¯°²ÏØ| ĪÁ¦| °ØÏçÏØ| ÉÏÈÄÊÐ| °²ÇìÊÐ|