DJ's c++ blog

c++学习历程

常用链接

统计

最新评论

啃书笔记:设计模式

最近在啃的书,都是大部头,不方便随身携带.于是,就在包里丢了本<设计模式解析>,以便平时没事干的时候看.

可是由于看了的很多东西都不能立刻投入到实用中,久而久之就很容易忘记.(effective那两本就是这样).

于是就想在读书的同时写写一些关键点以及理解,权当加深记忆,还有锻炼表达能力.

这个坑就献给<设计模式解析>,<设计模式>这两书吧.前者是听到网上评论说不错,读了再读<设计模式>会理解的更好,于是就入了.现在在读.

由于这是刚看刚写,如果有不正确的,希望赐教,见笑啦.
======================================================================

内聚性指的是类内部组成部分之间相互联系的紧密程度
耦合性指的是一个类与其它类之间联系的紧密程度

封装变化
用类的聚合代替继承

Facade

"为子系统中的一组接口提供一个统一的接口.Facade模式定义了一个更高层的接口,使子系统更加容易使用"

Facade模式是提供一个新的,更加简单以及符合实用的接口,来使用一个复杂系统的子集.
我写的那个俄罗斯方块中的Console类,貌似就是符合Facade模式的,需要用的控制台API(占总数的一小部分)封装到Consol类中,使得控制方块的显示改变更加容易.


Adapter

"将一个类的接口转换成客户希望的另外一个接口.Adapter模式使原本由于接口不兼容而不能一起工作的类可以一起工作."

1.例如抽象类有接口int foo(int a,int b,bool c),其派生类A中的foo函数已经由另外一个函数实现,但是函数foo2只需要两个参数,则可以如下复用代码.
int foo(int a,int b,bool c)
{
   return foo2(a,b);
}

2.如果虚基类Shape有多个派生类,如Point,Square,Circle等.但是其中一个派生类已有相似实现,如ShapeCircle,但是ShapeCircle的接口又与Shape不一致.则可在Circle中包含一个类型为ShapeCircle的数据成员,并在接口的实现中运用1,以此复用代码.


Strategy

"定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换.Strategy模式使算法可独立于使用它的客户而变化."

(话说,这句话真是看的人云里雾里的...)

一个类A中,拥有许多的成员函数,这些函数都需要根据一些状态进行不同操作.如果将A当作基类直接写相应状态的派生类时,随着状态的复杂程度增加,则会导致继承层次过大,特化版本过多.
Strategy模式则是将类A中的函数封装成虚基类,然后通过继承A中的类成员以应对不同的状态.


Bridge

"将抽象与其实现解耦,使它们都可以独立地变化."

一个类A需要调用不同的实现做不同的事情,如果用继承去解决(用某种实现实现某种事情则为1个派生类),随着不同的实现(m)和不同的事情(n)的数量增长,会造成派生类数量的爆炸性增长(m*n).Bridge模式是把实现抽象,然后在A中持有实现的句柄,再通过动态创建做事情(m+n).


Abstract Factor

"为创建一组相关或相互依赖的对象提供一个接口,而且无需指定它们的具体类."

@_@ 这个觉得定义的挺明确的,刚看完,还没怎么思考过,有空再补写...

to be continue...

posted on 2009-10-14 20:54 DJ 阅读(281) 评论(0)  编辑 收藏 引用 所属分类: 啃书笔记


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理