![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
文章平均质量分 70
StarLee
欢迎大家访问我的Blog。
主要是C++,设计模式,面向对象设计和.Net方面的技术文章。
展开
-
重读《设计模式》之学习笔记(一)--混入类
作者在1.6.4提到了混入类,可是对它的描述却非常简单:混入类是给其他类提供可选择的接口或功能的类。它与抽象类一样不能实例化。混入类要求多继承。并给了一个如下的类图: 我觉得,混入类主要用在不同的类有部分相同的接口的时候。使用混入类不仅可以提高代码的重用性,还可以使相关的操作集中在一个类中而不是分散在各个类中,提高了代码的可维护性。 现在用一个简单的例子来说明混入类在原创 2006-03-27 16:46:00 · 6277 阅读 · 0 评论 -
消除VISITOR模式中的循环依赖
在我的那篇《VISITOR模式--《敏捷软件开发》读书笔记(三)》中,我用一个C++的小例子说明了设计模式中的VISITOR模式。在例子代码中,我们可以发现:为了使VISITOR类CVisitor通过编译,它就必须知道它要访问的类(CTRectangle,CTSquare,CTCircle, CTText ,CTView )的定义;而这些被访问的类要通过编译,它们必须知道类CVisitor原创 2006-12-19 09:14:00 · 3764 阅读 · 1 评论 -
VISITOR模式--《敏捷软件开发》读书笔记(三)
考虑一下设计一个可以包含长方形、正方形、圆形以及文字的视图类。因为视图中每种元素的显示方式都不一样,所以我们很容易做出如下的设计: 在这里,我使用了COMPOSITE模式。对于COMPOSITE模式,可以参考我那篇《重读《设计模式》之学习笔记(五)--我对COMPOSITE模式的理解》。 现在,我们来分析一下上面的这个设计方案。如果说,由于客户需求的改变,视图中每个元素原创 2006-08-02 10:30:00 · 4680 阅读 · 0 评论 -
DECORATOR模式--《敏捷软件开发》读书笔记(二)
比如现在我们有如下的几个类:class CGShape{public: ~CGShape(); virtual void Draw() = 0;};class CGRectangle : public CGShape{public: void Draw();};class CGSquare : public CGShape{public: void Draw原创 2006-07-28 08:32:00 · 3417 阅读 · 1 评论 -
COMMAND模式--《敏捷软件开发》读书笔记(一)
现在几乎每个软件都有Undo和Redo功能,要想实现这个功能就要用到COMMAND模式。所有的操作都应该从类似如下的抽象类CCommand继承:class CCommand{public: virtual ~CCommand(); virtual void Do() = 0; virtual void Undo() = 0;}; 这样就可以在操作的时原创 2006-07-27 08:43:00 · 3541 阅读 · 1 评论 -
重读《设计模式》之学习笔记(六)--经典的23种设计模式
今天,终于重新读完了《设计模式》。 其实,这本书给我的感觉有点儿教条化。有些模式,在看开始的论述时会有些生涩感,看到后面的示例代码后才会有更深刻的理解。不过,这本书确实是经典,里面的这23种设计模式真的是总结的非常好,如果在能软件设计的时候熟练使用的话,那开发出的软件的质量会非常高。书中把这23种设计模式分为创建型、结构型和行为型三种类型。下面是书中的表格: 对于这23原创 2006-04-05 16:53:00 · 4205 阅读 · 0 评论 -
重读《设计模式》之学习笔记(三)--SINGLETON模式的疑惑
《More Effective C++》的条款26限制某个class所能产生的对象数量中也讲解了本书的3.5节的SINGLETON模式。3.5节一开始就说明了该模式的意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 然而,两本书在产生唯一的实例的方法上却是截然相反。本书使用类的静态成员函数,而《More Effective C++》中却用静态对象。他们唯一的相同之处就是都原创 2006-03-31 13:55:00 · 5642 阅读 · 12 评论 -
重读《设计模式》之学习笔记(二)--再论接口与实现的分离
在我的那篇《C++中接口与实现分离的技术》我用具体的代码说明了C++中接口与实现分离的技术,并指出这样的三点好处:1、只暴露了类的接口而隐藏了实现细节;2、在类的实现有变动的时候,用户不需要更新头文件,不用重新编译;3、在分析阶段设计接口,在编码阶段来实现功能,可以更好的维护和升级。 本书作者在2.6.3提到了Window和WindowImp,指出WindowImp类层次是用来隐藏不原创 2006-03-30 14:41:00 · 4540 阅读 · 0 评论 -
重读《设计模式》之学习笔记(五)--我对COMPOSITE模式的理解
书中4.3节是COMPOSITE模式,下面是书中给的类结构图: 并告诉我们说这是递归组合。 而书中给的例子并不好理解。在我看来,COMPOSITE模式就是组合对象和单个对象的类继承自同一个基类。比如说,CPU、主板、内存、声卡、显卡都是是电脑设备,而它们组合在一起的电脑主机也是电脑设备,主机和显示器组合成的电脑也是电脑设备。它们的基类都是一个--电脑设备类。 这样做原创 2006-04-03 09:53:00 · 4085 阅读 · 0 评论 -
重读《设计模式》之学习笔记(四)--BRIDGE模式
刚才看了4.2节的BRIDGE模式,发现其实这个模式就是在我那两篇文章《C++中接口与实现分离的技术》和《重读《设计模式》之学习笔记(二)--再论接口与实现的分离》里面论述的一种设计方法。下面是书中描述的该模式的优点:1)分离接口及其实现部分;2)提高可扩充性;3)实现细节对客户透明。我在《C++中接口与实现分离的技术》里面用C++的实例代码主要论述了上面的优点1和优点3,而在《重读《设计原创 2006-03-31 15:56:00 · 3247 阅读 · 0 评论 -
ADAPTER(适配器)模式
ADAPTER模式可以将一个类的接口转换成另外一个接口,那样就可以使原来不兼容而不能一起工作的那些类可以一起工作。 ADAPTER模式也可以称为WRAPPER模式。 对于ADAPTER模式的简单包装功能,下面以STL中的一个例子来说明: // 下列代码片断摘自VC++ 6.0中的STACK// 可以在..VC98/Include/STACK中找到templateclas原创 2007-01-17 09:14:00 · 5484 阅读 · 7 评论