
设计模式
yingge2016
这个作者很懒,什么都没留下…
展开
-
状态模式
状态模式:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。它有两种使用情况: (1)一个对象的行为取决于它的状态, 并且它必须在运行时刻根据状态改变它的行为。 (2)一个操作中含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态。 #include using namespace std; class Work; class Status{ publi转载 2017-11-30 21:52:33 · 161 阅读 · 0 评论 -
迭代器模式
提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。当你需要访问一个聚集对象,而且不管这些对象是什么都需要遍 历的时候,就应该考虑用迭代器模式。同时需要对聚集有多种方式遍历时,可以考虑用迭代器模式。为遍历不同的聚集结构提供如开始、下一个、是否结束、当前哪 一项等统一接口。迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让转载 2017-11-28 12:39:30 · 162 阅读 · 0 评论 -
解释器模式
解释器模式 #include #include using namespace std; class Context{ public: int getNum(){return m_num;} void setNum(int n){m_num=n;} private: int m_num; }; class AbstractExpreesion{ public:转载 2017-11-27 22:10:09 · 112 阅读 · 0 评论 -
命令模式
命令模式是一种使用频率非常高的设计模式,它可以将请求发送者与接收者解耦,请求发送者通过命令对象来间接引用请求接收者,使得系统具有更好的灵活性和可扩展性。在基于GUI的软件开发,无论是在电脑桌面应用还是在移动应用中,命令模式都得到了广泛的应用。 1. 主要优点 命令模式的主要优点如下: (1) 降低系统的耦合度。由于请求者与接收者转载 2017-11-27 19:04:53 · 177 阅读 · 0 评论 -
责任链模式
责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。其思想很简单,考虑员工要求加薪。公司的管理者一共有三级,总经理、总监、经理,如果一个员工要求加薪,应该向主管的经理申请,如果加薪的数量在经理的职权内,那么经理可以直接批准,否则将申请上交给总监。总监的处理方式也一样,总经理可以处理所有请求。这就是转载 2017-11-27 18:25:14 · 127 阅读 · 0 评论 -
观察者模式
观察者模式是一种使用频率非常高的设计模式,无论是移动应用、Web应用或者桌面应用,观察者模式几乎无处不在,它为实现对象之间的联动提供了一套完整的解决方案,凡是涉及到一对一或者一对多的对象交互场景都可以使用观察者模式。观察者模式广泛应用于各种编程语言的GUI事件处理的实现,在基于事件的XML解析技术(如SAX2)以及Web事件处理中也都使用了观察者模式。 1.主要优点转载 2017-11-26 23:16:53 · 198 阅读 · 0 评论 -
代理模式
代理模式是常用的结构型设计模式之一,它为对象的间接访问提供了一个解决方案,可以对对象的访问进行控制。代理模式类型较多,其中远程代理、虚拟代理、保护代理等在软件开发中应用非常广泛。 #include #include using namespace std; //大话设计模式中的例子,小林替小王给女孩送礼物 class Interface{ public: virtual voi转载 2017-11-26 21:42:46 · 131 阅读 · 0 评论 -
享元模式
不负责任+概括的说,享元模式=单例模式+工厂模式 #include using namespace std; class Product{ public: Product(const string& s=string("Product")){ m_name=s; } void display(){ cout<<"name:"<<m_n转载 2017-11-26 21:06:22 · 136 阅读 · 0 评论 -
外观模式
外观模式是一种使用频率非常高的设计模式,它通过引入一个外观角色来简化客户端与子系统之间的交互,为复杂的子系统调用提供一个统一的入口,使子系统与客户端的耦合度降低,且客户端调用非常方便。外观模式并不给系统增加任何新功能,它仅仅是简化调用接口。在几乎所有的软件中都能够找到外观模式的应用,如绝大多数B/S系统都有一个首页或者导航页面,大部分C/S系统都提供了菜单或者工具栏,在这里,首页和导航页面就是B/转载 2017-11-25 23:27:34 · 196 阅读 · 0 评论 -
装饰模式
装饰模式可以在不改变一个对象本身功能的基础上给对象增加额外的新行为,在现实生活中,这种情况也到处存在,例如一张照片, 我们可以不改变照片本身,给它增加一个相框,使得它具有防潮的功能,而且用户可以根据需要给它增加不同类型的相框,甚至可以在一个小相框的外面再套一个大相框。 装饰模式是一种用于替代继承的技术,它通过一种无须定义子类的方式来给对象动态增加职责,使用对象之间的关联关系取代类之转载 2017-11-25 23:08:32 · 125 阅读 · 0 评论 -
组合模式
对于树形结构,当容器对象(如文件夹)的某一个方法被调用时,将遍历整个树形结构,寻找也包含这个方法的成员对象(可以是容器对象,也可以是叶子对象) 并调用执行,牵一而动百,其中使用了递归调用的机制来对整个结构进行处理。由于容器对象和叶子对象在功能上的区别,在使用这些对象的代码中必须有区别地 对待容器对象和叶子对象,而实际上大多数情况下我们希望一致地处理它们,因为对于这些对象的区别对待将会使得程序非转载 2017-11-25 18:14:44 · 156 阅读 · 0 评论 -
桥接模式
//桥接模式是一种很实用的结构型设计模式,如果软件系统中某个类存在 两个独立变化的维度,通过该模式可以将这两个维度分离出来,使两者可以独立扩展, 让系统更加符合“单一职责原则”。与多层继承方案不同,它将两个独立变化的维度 设计为两个独立的继承等级结构,并且在抽象层建立一个抽象关联,该关联关系类似 一条连接两个独立继承结构的桥,故名桥接模式。 // 桥接模式用一种巧妙的方式处原创 2017-11-25 12:03:13 · 181 阅读 · 0 评论 -
适配器模式
1. 主要优点 无论是对象适配器模式还是类适配器模式都具有如下优点: (1) 将目标类和适配者类解耦,通过引入一个适配器类来重用现有的适配者类,无须修改原有结构。 (2) 增加了类的透明性和复用性,将具体的业务实现过程封装在适配者类中,对于客户端类而言是透明的,而且提高了适配者的复用性,同一个适配者类可以在多个不同的系统中复用。原创 2017-11-25 11:14:15 · 264 阅读 · 0 评论 -
建造者模式
//建造者模式是较为复杂的创建型模式, //它将客户端与包含多个组成部分(或部件)的复杂对象的创建过程分离, //客户端无须知道复杂对象的内部组成部分与装配方式,只需要知道所需建造者的类型即可。 //它关注如何一步一步创建一个的复杂对象,不同的具体建造者定义了不同的创建过程, //且具体建造者相互独立,增加新的建造者非常方便,无须修改已有代码,系统具有较好的扩展性。 #include #incl原创 2017-11-24 23:37:18 · 176 阅读 · 0 评论 -
原型模式
原型模式,可以动态的复制某个对象。 主要是实现类的拷贝构造函数,在拷贝构造函数中主动复制所有的成员变量。 #include using namespace std; class Cloneable { public: virtual Cloneable*clone()=0; }; class CloneA:public Cloneable { public: Clone原创 2017-11-24 22:04:41 · 158 阅读 · 0 评论 -
抽象工厂
抽象工厂模式,应用于拥有产品组的情形。 #include using namespace std; //一个学习用品的工厂类,其中又分是哪个产品种类,产品又分三个色系 //红色:笔,笔记本,书包 //蓝色:笔,笔记本,书包 //绿色:笔,笔记本,书包 class Product { public: virtual void show(){cout<<"Porduct"<<endl原创 2017-11-24 21:25:03 · 163 阅读 · 0 评论 -
简单工厂模式
#include #include using namespace std; //声明产品基类 class Product { public: Product(){} virtual void show(){cout<<"Product"<<endl;} }; //产品A继承自Project类 class ProductA:public Product { public:原创 2017-11-24 20:01:03 · 128 阅读 · 0 评论 -
单例模式
1 //懒汉模式 class Singleton { private: Singleton(){} static Singleton *m_instance; // class Garbo { public: ~Garbo() { if(Singleton::m_instance!=NULL)原创 2017-11-24 18:24:26 · 160 阅读 · 0 评论 -
中介者模式
中介者模式:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式的例子很多,大到联合国安理会,小到房屋中介,都扮演了中间者的角色,协调各方利益。 本文就以租房为例子,如果没有房屋中介,那么房客要自己找房东,而房东也要自己找房客,非常不方便。有了房屋中介机构就方便了,房东可以把要出租的房屋信息放到转载 2017-11-28 20:42:34 · 210 阅读 · 0 评论