05 2013 档案
摘要:这个模式很简单,就是把好几类实现的功能用一个类整合起来,这样用户就只需要调用一个类中的这个方法就可以实现全部的过程。实现代码(代码来自k_eckel): 1 //Subsystem1.h 2 class Subsystem1 3 { 4 public: 5 Subsystem1(); 6 ~Subsystem1(); 7 void Operation(); 8 protected: 9 private:10 };11 12 //Subsystem1.cpp13 #include <iostream>14 using namespace std;15 Subsystem1::Subs
阅读全文
摘要:进入GO语言的学习啦,相关资料网站http://code.google.com/p/golang-china/
阅读全文
摘要:首先MFC 提供了消息的处理的链式处理策略,处理消息的请求将沿着预先定义好的路径依次进行处理。消息的发送者并不知道该消息最后是由那个具体对象处理的,当然它也无须也不想知道,但是结构是该消息被某个对象处理了,或者一直到一个终极的对象进行处理了。其次虚函数也是一个典型的运用,当把子类的指针赋值给父类指针对象时,当用这个父类指针调用虚函数时,他首先会看子类中是否有与这个函数类型完全一样的类型,没有才会调用父类的。代码实现参考:http://www.cnblogs.com/wanggary/archive/2011/04/20/2022988.html责任链模式最大的好处就是极大的降低了程序的耦合度。
阅读全文
摘要:命令模式适用于如下的情况:比如说在一个软件公司,有美术小组,需求小组,测试小组。客户想改变界面风格需要去找美工小组,客户想添加一个功能需要去找需求小组,客户对功能不满意需要去找测试小组。客户不想每次都去不同的部门找不同的人,这时需要一个项目经理就好了,客户只需要找项目经理一个人,告诉他自己的想法,具体是由谁去执行任务由项目经理去分配任务。如上图所示:每个部门都继承IGroup基类,每个部门在自己类中实现自己的功能。ICommand是命令的父类,该类中有每个部门子类的指针,可以调用每个部门的各种功能。用户只需把自己的要求告诉CInvoker,用SetCommand函数:m_command.Exe
阅读全文
摘要:composite模式(组合模式):一.该设计模式主要用来解决如下问题:如上图所示:我们有一个树形结构,也可以想象成文件管理系统。我们在处理每个节点的时候,不需要考虑它到底是什么节点,因为所实现的方法都是一样的。对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。二.组合模式又分为两种:①透明模式:即在最高层component里面声明所有管理子类的方法(如:add,remove等),这样做的好处就是,对所有的对象接口统一了,可以同等的对待所有的对象,所以为透明模式。但是有些叶子节点是没有这些方法的,因此透明模式不安全。②安全模式:在Compo
阅读全文
摘要:Decorator模式(装饰者模式):有时候我们想为已有的类添加一些新的职责,可以通过新建一个类继承已有的类。但是这样不仅类的数量会增加,而且继承的深度也会增加,代码会更加复杂。装饰者模式就可以更加好的解决此类问题。其中ConcreteComponent和Decorator类都有共同的基类Component。当然可以让Decorator直接拥有一个指向ConcreteComponent的引用或指针也可以达到同样的效果。但是这样做并不好,如果新添加一个ConreteComponent就需要修改Decorator。而用如上的设计,无论添加多少个ConcretorComponent,都不需要改变De
阅读全文
摘要:Adapter模式分为两种:类模式和对象模式。类模式代码实现: 1 //Adapter.h 2 class Adapter:public Target ,private Adaptee 3 { 4 public: 5 Adapter(); 6 ~Adapter(); 7 void Request(); 8 protected: 9 private: 10 }; 11 #endif //~_ADAPTER_H_ 12 13 //Adapter.cpp14 Adapter::Adapter() 15 { 16 } 17 Adapter::~Adapter() 18 { 1...
阅读全文
摘要:1.纯虚函数如果在基类中将函数声明为纯虚函数(pure virtual method),那么基类将不会实现该函数,不提供缺省操作,所有继承的子类都必须分别实现自己的操作。基类也可以实现纯虚函数,在类里声明,在类外面实现,如果子类没有实现的话,就调用父类中的实现。用Parent::A()调用。(不确定)2.虚函数如果在基类中将函数声明为虚函数(virtual method),那么基类就可以为子类提供缺省操作,子类可以选择实现自己的代码,也可以不实现,采用基类的缺省操作。3.非虚函数如果基类中的函数为非虚函数(non-virtual),那么子类不仅要继承基类的接口,还需要继承基类的代码,相当于基类
阅读全文
摘要:两个类交叉引用导致了上面的错误。
阅读全文
摘要:结构型模式-bridge设计模式bridge模式实现类图如下:在如上类图中,refinedAbstraction类代表了windows操作系统,该类中维护了一个指向abstractImplement的指针,这样就可以自由的调用下面的具体的方法了。如果用户突然想给windows系统增加一个计算器功能,这样我们就只需要给abstractimplement添加一个子类实现计算器的功能就行。如果用户突然又想,实现mac操作系统,这样我们只需在abstract中添加一个mac的子类,这样mac类中就可以通过一个指向abstractimplement的指针实现上面的功能。以上是我的理解。参考代码:(来自h
阅读全文
摘要:Prototype模式提供了自我复制的功能,就是说新对象的创建可以通过已有对象进行创建。prototype设计模式不止一个clone方法那么简单,而是为对象的创建提供了统一的clone接口,允许客户代码在不知道对象的具体类型的情况下进行创建。其中拷贝构造函数的原型为: 类名 (const 已存在对象的引用),默认的拷贝构造函数为浅复制,即按位拷贝。如果类中存在指针,组合对象等成员变量是,就不能简单的按位拷贝了,必须自己实现拷贝构造函数,在函数中先为新的对象分配内存,在拷贝值。下面是k_eckel书中的代码片段,其中类里面没有成员变量,只是简单的采用了浅复制。如果是要深复制,要如下这样,代码来自
阅读全文
摘要:今晚写代码,结构体直接=报错了,于是给结构体重载运算符,在博客园中看见一篇很好的博客,收藏啦~~~原地址:http://www.cnblogs.com/xielechuan/archive/2012/05/25/2518358.html结构体运算符重载1、定义结构体struct Currency{ int Dollar; int Cents;}2、重载IO输出操作,在结构体内部将输入操作的重载定义为友元函数重载friend ostream &operator<<(ostream &out,Currency value);在结构体外部进行具体定义ostream&
阅读全文
摘要:在资源视图中,选中一个控件,右键添加变量,没有反应,主要原因是对话框没有关联到类,所以无法添加。想在单文档里面使用对话框,可视化编辑,可将dialog关联到cformview类。
阅读全文
摘要:一、引用变量的三个特性:①引用和它引用的对象在数值上是联动的,改变你也就改变了我,改变我也就改变了你。 ②从一而终,引用在初始化是绑定某个对象后是不能改变的,如: intv,k,h; //定义三个int的变量 int&rv=v; //定义了一个和v绑定的引用rv rv=3; //此时rv的值变为3,v的值也变为3 v=5; //此时v的值变为5,rv的值也变为5 k=rv+2; //此时k=5+2=7。 h=12; //此时h=12 rv=h; //引用是从一而终的...
阅读全文
摘要:MFC默认建立的Dialog按Esc响应OnCancel,回车响应OnOK,都会关闭对话框。而点击下方两个按钮功能相同,点击确定是响应OnOK, 点击取消调用OnCancel。而OnOK和OnCancel之间是有区别的:CDialog::OnOK首先调用UpdateData(TRUE)将数据传给对话框成员变量,然后调用CDialog::EndDialog关闭对话框。 CDialog::OnCancel只调用CDialog::EndDialog关闭对话框。所以我们在销毁dialog需要进行一些数据交换就可以在OnOK中进行。
阅读全文
摘要:Builder建造者模式,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。上图的类关系主要是这样的:有两种车要生产:benz和BMW, 其中每种不同品牌的车里面还有小的分类,比如有些BENZ车要加入一些功能如(EngineBoom,并不是所有的车都有)。所以我们先创建一个abstract类,里面有生产车的各个步骤的抽象方法,然后是BENZ车和BMW车都去继承这个类,各自实现自己抽象类里各个步骤的具体方法。然后创建builder模式中关键的类builder类,该类用来实现按顺序去创建具体的产品,然后针对每种产品创建出一个相对应的builder继承抽象builder类。然
阅读全文
摘要:当程序中某个类只允许只有一个对象存在的时候用到singleton模式。具体的代码实现:singleton 类单例模式很多时候与工厂模式结合起来用,因为工厂都定义为单一的。
阅读全文
摘要:AbstractFactory模式解决这类问题:要创建一组相关或者相互依赖的对象。上图是对抽象工厂的理解,抽象工厂和工厂模式最大的区别就是用户对一组对象的创建,每组对象又有不同的子对象。比如说有怪物(低级怪物,中级怪物),巫婆(低级巫婆,高级巫婆);黄种人(男,女),白种人(男,女),黑种人(男,女)....就要用到抽象工厂模式。每个具体的工厂负责创建低级的或者高级的,男人或女人...
阅读全文
摘要:factory模式主要是解决两个问题:①创建对象的接口封装product ②将类的实例化推迟到子类ConcreteFactoryfactory模式带来的两个问题以及解决:①如果为每个具体的concreteproduct类的实例化提供一个函数体,每新添加一个具体的product就得加一个函数体,这样factory接口就永远不能封闭。这个问题可以通过创建factory子类多态来实现这一点,但是这也是以新建一个类作为代价。②在实现中我们可以通过参数化工厂方法,即给factorymethod方法传递一个参数用来决定具体是创建哪一个concreteproduct。图一:创建对象的封装接口product图
阅读全文
摘要:刚开始把代码写在了注释掉的地方,是错误的,在窗口没有创建之前是不能进行操作的。
阅读全文