摘要: 18.1.解释概念:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。main(),客户IVisitor,访问者接口CBaseVisitor,访问者实现类CEmployee,被访问者抽象类CCommonEmployee,被访问者实现类之一CManager,被访问者实现类之二说明:A接受B的访问,B主动的执行访问动作。注意:和观察者的区别是,被观察者要执行一个动作,然后主动发送通知给观察者。访问者模式是由访问者主动发出的动作。看代码://IVisitor.h#pragma onceclass CCommonEmployee;class CM 阅读全文
posted @ 2011-04-21 20:02 星晨_jqren 阅读(9878) 评论(0) 推荐(2) 编辑
摘要: 17.1.解释概念:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。main(),客户IWomen,发出请求者接口CWomen,请求者实现类CHandler,处理请求抽象类CFather,处理请求实现类,责任链之一CHusband,处理请求实现类,责任链之二CSon,处理请求实现类,责任链之三说明:CHandler抽象类负责聚合责任链之中的其它处理对象,用SetNext来建立这个责任链。HandleMessage在处理请求时,会判断是否是自己要处理的请求,如果是则直接处理。如果不是,则查找下一个责任 阅读全文
posted @ 2011-04-20 22:33 星晨_jqren 阅读(4863) 评论(2) 推荐(2) 编辑
摘要: 16.1.解释概念:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。main(),IObservable,被观察者接口CHanFeiZiObservable,被观察者韩非子IObserver,观察者接口CLiSiObserver,观察者李斯CZhouSiObserver观察者周斯说明:将观察者聚集到被观察者韩非子身边,韩非子的每一个举动都会通知给观察者,如李斯或周斯。注意:最多允许一个对象既是观察者也是被观察者。就像数据库中的触发器一样,成为一个复杂的链就很难维护了。观察者类似于委托的处理方式。//IObservable.h#pragma 阅读全文
posted @ 2011-04-20 22:21 星晨_jqren 阅读(12462) 评论(0) 推荐(2) 编辑
摘要: 15.1.解释概念:将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合的使用具有一致性。main(),客户CCorpNode,抽象基类,实现基本信息CBranchNode,树枝节点,实现Addordinate()函数和GetSubordinate()函数CLeafNode,叶子节点,IsLeaf属性总是“true”说明:组合模式主要是实现在CBranchNode对象里增加对其它对象的数组,如vector<CCorpNode*>,数组里可以存放CBranchNode和CLeafNode对象。这样方便进行遍历操作。注意:组合模式有透明组合模式 阅读全文
posted @ 2011-04-19 22:34 星晨_jqren 阅读(4938) 评论(0) 推荐(1) 编辑
摘要: 14.1.解释概念:提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。main(),客户IProject,产品接口CProject,产品类IIterator,迭代器接口IProjectIterator,产品迭代器接口CProjectIterator,产品迭代器实现类说明:CProject实现产品类,能够返回一个迭代器的指针。这个迭代器将封装产品类里的一个数组。所以迭代器在运行Next函数时,可以遍历这个数组的所有元素。简单来说,就是用代码实现vector<int>::iterator或vector<int>::const_iterator。我们来 阅读全文
posted @ 2011-04-19 21:53 星晨_jqren 阅读(7294) 评论(2) 推荐(1) 编辑
摘要: 装饰模式,动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。13.1.解释main(),老爸ISchoolReport,成绩单接口CFourthGradeSchoolReport,四年级成绩单ReportDecorator,成绩单装饰器基类HighScoreDecorator,最高分装饰器SortDecorator,班级排名装饰器说明:对“四年级成绩单”进行装饰,ReportDecorator必然有一个private变量指向ISchoolReport。注意:看代码:// Decorator.cpp//主程序#include "stdafx 阅读全文
posted @ 2011-04-18 21:57 星晨_jqren 阅读(5212) 评论(1) 推荐(2) 编辑
摘要: 命令模式,将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。应该是一个比较简单的模式了。12.1.解释main(),客户CInvoker,命令接收者,如项目经理IGroup,执行者接口CRequirementGroup,实际执行者之一CPageGroup,实际执行者之二CCodePage,实际执行者之三ICommand,命令接口CAddRequirementCommand,Execute函数,将调用CRequirementGroup的多个命令。来组合执行用户发出的命令。CDeletePageCommand,同上... ... 其它 阅读全文
posted @ 2011-04-18 21:38 星晨_jqren 阅读(6128) 评论(3) 推荐(0) 编辑
摘要: 桥梁模式,将抽象部分与它的实现部分分离,使它们都可以独立地变化。实现分离的办法就是增加一个类,11.1.解释main(),客户IProduct,产品接口CHouse,房子CIPod,ipodCClothes,服装CNewCorp,桥梁类,MakeMoney()是桥梁方法CNewHouseCorp,只能生产房子,所以构造函数是CHouse*CShanZhaiCorp,什么赚钱就生产什么,所以构造函数是IProduct*说明:客户直接使用CNewHouseCorp和CShanZhaiCorp类,在main()函数里构造产品,然后传到这两个类里。这两个类的MakeMoney()函数,先调用基类的Ma 阅读全文
posted @ 2011-04-17 19:55 星晨_jqren 阅读(6708) 评论(2) 推荐(3) 编辑
摘要: 算法执行时间需通过依据该算法编制的程序在计算机上运行时所消耗的时间来度量。而度量一个程序的执行时间通常有两种方法。(1)事后统计的方法。(2)事前分析估算的方法。因事后统计方法更多的依赖于计算机的硬件、软件等环境因素,有时容易掩盖算法本身的优劣。因此人们常常采用事前分析估算的方法。两个N * N矩阵相乘。如 2 * 2的矩阵,void CMatrixNN::ComputeN2(void){ const int n = 2; int a[n][n] = { {1, 2}, {1, 2} }; int b[n][n] = { {1, 2}, {1, 2} }; int result2[][n] . 阅读全文
posted @ 2011-04-17 18:11 星晨_jqren 阅读(4056) 评论(0) 推荐(0) 编辑
摘要: 1.安全,这是我最开始使用火狐浏览器原因,因为有很多网站的恶意代码都是针对IE内核浏览器的。当然相对而言TT、Maxthon、360会比IE安全一些,但仍然不是百分之百的安全。2.插件,这是我后来使用火狐的第二个原因,第一个原因让我用了很长时间。直到每天上班都不想带着笔记本了,但用习惯了火狐的操作方式,希望在公司的电脑上也是一样的习惯,特别是收藏夹。在火狐上必装的插件有两个Tab Mix和GBookmarks,前者保持了浏览器使用上的一致,后者保证了收藏在Internet上,无论在哪里,不用带着笔记本都可以随时使用,重安装系统时也不用备份了。3.兼容,随着时间的推移,越来越多的网站在开发时,需 阅读全文
posted @ 2011-04-17 11:04 星晨_jqren 阅读(1423) 评论(0) 推荐(0) 编辑