﻿<?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>C++博客-Sunshine Alike-随笔分类-设计模式</title><link>http://www.cppblog.com/sunshinealike/category/13260.html</link><description>半完美主义</description><language>zh-cn</language><lastBuildDate>Sun, 11 Apr 2010 08:39:49 GMT</lastBuildDate><pubDate>Sun, 11 Apr 2010 08:39:49 GMT</pubDate><ttl>60</ttl><item><title>一点软件设计的体会：设计模式和UML</title><link>http://www.cppblog.com/sunshinealike/archive/2010/04/10/112162.html</link><dc:creator>Sunshine Alike</dc:creator><author>Sunshine Alike</author><pubDate>Sat, 10 Apr 2010 05:19:00 GMT</pubDate><guid>http://www.cppblog.com/sunshinealike/archive/2010/04/10/112162.html</guid><wfw:comment>http://www.cppblog.com/sunshinealike/comments/112162.html</wfw:comment><comments>http://www.cppblog.com/sunshinealike/archive/2010/04/10/112162.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/sunshinealike/comments/commentRss/112162.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/sunshinealike/services/trackbacks/112162.html</trackback:ping><description><![CDATA[这学期开始认真学习设计模式这门课，老师课上说了一句话：在设计模式出现以前，软件开发是门艺术，只有那些有天赋的程序员才能写有优雅的代码；设计模式被人们总结出来之后，软件开发就成了一门技术了，有着固定的模式可以参考，没有天赋的程序员也可以写出很好的代码。<br />先不管这句话的正确与否，但是有一点是确定的，软件的开发过程中，设计是非常重要的。有一个好的设计能够将软件开发失败的机率降到最低。<br />设计模式不应该被视为软件开发的说明书，照着那一条一条的模式套用并不一定能写出来好的程序，正确的态度应该是把它们作为软件设计的经验和建议来看。<br />最近看了下那本《敏捷软件开发：原则、模式与实践》，感觉确实是本好书，可以看出来作者对软件开发的功力非常丰富。我发现作者在说明软件开发过程的时候大量使用了UML，以前我都认识这些东西很虚，很麻烦。现在看这本书的时候却有点了不同的体会，哈哈，看来是我以前层次太低了。UML实在是一个好东西，清晰明了，用来描述复杂的系统的时候真有种拨云见日的感觉。<br /><br />下面简单写一下UML的基本知识：<br />1.识别参与者<br />2.抽取用例<br />用例中有两点需要说明一下：扩展(extension)/包含(include)<br />扩展：它们之间互不引用，仅仅插入到被扩展用例中<br />包含：包含用例会<b>引用</b>被包含的用例<br />基本用例完成之后，可以根据参与者将其分类组织起来，形成系统的边界图来汇总显示。<br /><br />3.领域模式(domain)<br />这是一种类似于UML类图,但是它们之间有很大的差别，它并不会对应于编码中的类(class)。<br />4.类之间的关系<br />关联：以一条线连接两个类表示，表示它们之间相互包含。更常见的是一种带箭头单向关联关系。<br />聚合：以一个白色菱形箭头表示类之间的“整体/局部”关系，同样聚合关系的一个变体“组合”，以一个黑色菱形箭头表示，这也是一种“整体/局部”关系，但是“部分”不能脱离“整体”而存在，“整体”也必须负责管理“部分”的生存期。<br />举例：家庭和人是聚合关系，而电脑与CPU是组合关系<br /><img src ="http://www.cppblog.com/sunshinealike/aggbug/112162.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/sunshinealike/" target="_blank">Sunshine Alike</a> 2010-04-10 13:19 <a href="http://www.cppblog.com/sunshinealike/archive/2010/04/10/112162.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Command和ActiveObjcet模式</title><link>http://www.cppblog.com/sunshinealike/archive/2010/04/02/111453.html</link><dc:creator>Sunshine Alike</dc:creator><author>Sunshine Alike</author><pubDate>Fri, 02 Apr 2010 09:04:00 GMT</pubDate><guid>http://www.cppblog.com/sunshinealike/archive/2010/04/02/111453.html</guid><wfw:comment>http://www.cppblog.com/sunshinealike/comments/111453.html</wfw:comment><comments>http://www.cppblog.com/sunshinealike/archive/2010/04/02/111453.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/sunshinealike/comments/commentRss/111453.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/sunshinealike/services/trackbacks/111453.html</trackback:ping><description><![CDATA[
		<p>Command模式，一个传说中非常简单的模式，但是其应用还真不简单。<br />通过接口将某些方法封装起来以达到解除系统逻辑互联关系的耦合的效果，并且实现了Command接口的类对象可以在系统中自由的重新组合，参数传递也非常方便，为系统带来灵活性的提升。<br />其应用范围包括数据库的事务操作、设备控制、多线程核心以及GUI的do/undo操作。<br /><br />ActiveObject模式是使用Command模式的应用之一，这是实现<strong>多线程控制</strong>的一种技术。<br /><br />下面是一个简单的实例：<br />1. 一个Command接口，定义了Execute方法。<br />2. 两个类SleepingCommand和PrinterCommand实现了Command中的Execute方法。<br />   在PrinterCommand中调用Execute时打印一个字符并创建一个新的PrinterCommand在指定的延时后执行。<br />   SleepingCommand表示一个睡眠中的Command，他在执行时只是简单的将自己放到链表末尾直到等待的事件（设定的延时到来）发生它才会将自己唤醒等待下一步执行。<br />3. 一个StopCommand类，实现了用于终止Command链循环的Execute方法。<br />4. 一个ActiveObjectManager对象，维护了一个Command对象链表，用户可以像Manager中AddCommand对象或者便利链表并依次调用Command对象的Execute方法执行任务。</p>
<img src ="http://www.cppblog.com/sunshinealike/aggbug/111453.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/sunshinealike/" target="_blank">Sunshine Alike</a> 2010-04-02 17:04 <a href="http://www.cppblog.com/sunshinealike/archive/2010/04/02/111453.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>