﻿<?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++博客-DJ's c++ blog-随笔分类-啃书笔记</title><link>http://www.cppblog.com/scut-dj/category/12056.html</link><description>c++学习历程</description><language>zh-cn</language><lastBuildDate>Wed, 14 Oct 2009 14:29:46 GMT</lastBuildDate><pubDate>Wed, 14 Oct 2009 14:29:46 GMT</pubDate><ttl>60</ttl><item><title>啃书笔记:设计模式</title><link>http://www.cppblog.com/scut-dj/archive/2009/10/14/98624.html</link><dc:creator>DJ</dc:creator><author>DJ</author><pubDate>Wed, 14 Oct 2009 12:54:00 GMT</pubDate><guid>http://www.cppblog.com/scut-dj/archive/2009/10/14/98624.html</guid><wfw:comment>http://www.cppblog.com/scut-dj/comments/98624.html</wfw:comment><comments>http://www.cppblog.com/scut-dj/archive/2009/10/14/98624.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/scut-dj/comments/commentRss/98624.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/scut-dj/services/trackbacks/98624.html</trackback:ping><description><![CDATA[<p>最近在啃的书,都是大部头,不方便随身携带.于是,就在包里丢了本&lt;设计模式解析&gt;,以便平时没事干的时候看.<br><br>可是由于看了的很多东西都不能立刻投入到实用中,久而久之就很容易忘记.(effective那两本就是这样).<br><br>于是就想在读书的同时写写一些关键点以及理解,权当加深记忆,还有锻炼表达能力.<br><br>这个坑就献给&lt;设计模式解析&gt;,&lt;设计模式&gt;这两书吧.前者是听到网上评论说不错,读了再读&lt;设计模式&gt;会理解的更好,于是就入了.现在在读.<br><br>由于这是刚看刚写,如果有不正确的,希望赐教,见笑啦.<br>======================================================================<br><br>内聚性指的是类内部组成部分之间相互联系的紧密程度<br>耦合性指的是一个类与其它类之间联系的紧密程度<br><br>封装变化<br>用类的聚合代替继承<br><br>Facade<br><br>"为子系统中的一组接口提供一个统一的接口.Facade模式定义了一个更高层的接口,使子系统更加容易使用"<br><br>Facade模式是提供一个新的,更加简单以及符合实用的接口,来使用一个复杂系统的子集.<br>我写的那个俄罗斯方块中的Console类,貌似就是符合Facade模式的,需要用的控制台API(占总数的一小部分)封装到Consol类中,使得控制方块的显示改变更加容易.<br><br><br>Adapter<br><br>"将一个类的接口转换成客户希望的另外一个接口.Adapter模式使原本由于接口不兼容而不能一起工作的类可以一起工作."<br><br>1.例如抽象类有接口int foo(int a,int b,bool c),其派生类A中的foo函数已经由另外一个函数实现,但是函数foo2只需要两个参数,则可以如下复用代码.<br>int foo(int a,int b,bool c)<br>{<br>&nbsp;&nbsp;&nbsp;return foo2(a,b);<br>}</p>
2.如果虚基类Shape有多个派生类,如Point,Square,Circle等.但是其中一个派生类已有相似实现,如ShapeCircle,但是ShapeCircle的接口又与Shape不一致.则可在Circle中包含一个类型为ShapeCircle的数据成员,并在接口的实现中运用1,以此复用代码.<br><br><br>Strategy<br><br>"定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换.Strategy模式使算法可独立于使用它的客户而变化."<br><br>(话说,这句话真是看的人云里雾里的...)<br><br>一个类A中,拥有许多的成员函数,这些函数都需要根据一些状态进行不同操作.如果将A当作基类直接写相应状态的派生类时,随着状态的复杂程度增加,则会导致继承层次过大,特化版本过多.<br>Strategy模式则是将类A中的函数封装成虚基类,然后通过继承A中的类成员以应对不同的状态.<br><br><br>Bridge<br><br>"将抽象与其实现解耦,使它们都可以独立地变化."<br><br>一个类A需要调用不同的实现做不同的事情,如果用继承去解决(用某种实现实现某种事情则为1个派生类),随着不同的实现(m)和不同的事情(n)的数量增长,会造成派生类数量的爆炸性增长(m*n).Bridge模式是把实现抽象,然后在A中持有实现的句柄,再通过动态创建做事情(m+n).<br><br><br>Abstract Factor<br><br>"为创建一组相关或相互依赖的对象提供一个接口,而且无需指定它们的具体类."<br><br>@_@ 这个觉得定义的挺明确的,刚看完,还没怎么思考过,有空再补写...<br><br>to be continue...
<img src ="http://www.cppblog.com/scut-dj/aggbug/98624.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/scut-dj/" target="_blank">DJ</a> 2009-10-14 20:54 <a href="http://www.cppblog.com/scut-dj/archive/2009/10/14/98624.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>