![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
mxzy55560593
这个作者很懒,什么都没留下…
展开
-
访问者模式
一般基于类的思想,是把数据和操作数据的函数封装在一个类中,比如提供一个Print()函数,所有类都应该实现这个函数并打印自己的数据,当这样的操作非常多时,相应的函数也会增加,这样的类包含了大量的操作,难以维护和管理 Visitor模式将数据和操作分离,Element功能只保存数原创 2011-08-13 10:14:40 · 318 阅读 · 0 评论 -
迭代器模式
#include "stdafx.h" #include "windows.h" #include #include #include #include #include #include #includ原创 2011-01-19 11:44:00 · 347 阅读 · 0 评论 -
生成器模式
原创 2011-08-15 16:20:40 · 293 阅读 · 0 评论 -
外观模式
何时使用外观模式? 分三个阶段说: 首先,在设计初期阶段,应该要有意识的将不同的两个层分离,比如经典的三层架构,就需要考虑在数据访问层和业务逻辑层、业务逻辑层和表示层的层与层之间建立外观Facade,这样可以为复杂的子系统提供一个简单的接口,使得耦合大大降低。 其次,原创 2011-08-15 16:22:21 · 331 阅读 · 0 评论 -
组合模式
原创 2011-08-15 14:18:53 · 291 阅读 · 0 评论 -
观察者模式
//共有基类 class IConsign { public: IConsign(){} virtual ~IConsign(){} }; //保存类指针和函数指针的类 #define INVOKE(Delegate) (Delegate.This->*D原创 2011-08-15 15:50:38 · 291 阅读 · 0 评论 -
装饰模式
原创 2011-12-07 20:05:00 · 569 阅读 · 0 评论 -
桥接模式
这是一个很重要的模式,一般会这样做,手机软件,手机游戏继承手机软件,然后是三星手机游戏和诺基亚手机游戏继承到手机游戏 桥接模式实现了功能和平台分离,也就是抽象和接口的分离原创 2011-08-13 11:01:28 · 951 阅读 · 0 评论 -
工厂模式
分为三种 1:简单工厂:提供很多函数,直接返回new出来的对象 2:简单工厂的变种:提供一个函数,传入字符串,函数中通过字符串返回不同的对象 3:抽象工厂:工厂本身是抽象的,一般一个具体的工厂产生一批产品,通过动态的替换工厂实现不同组产品的生成原创 2011-12-07 20:58:44 · 359 阅读 · 0 评论 -
克隆(原型)模式
非常重要的一个特点是:比如你有很多UI:按钮,列表,继承到Graphic,你创建一个工具栏类继承到Graphic,为了保持松耦合,工具栏类不需要知道这些元件类,所以传递元件类Graphic*到工具类,当点击工具栏类的按钮图标时,clone出一个Button类对象,然后使用,这降低了耦合原创 2011-08-15 16:30:06 · 269 阅读 · 0 评论 -
策略模式
商场的打一折和打九折只是形式的不同,抽象分析出来,所有的打折算法都是一样的,所以打折算法应该是一个类,打一折类和打九折类应该有同一个接口,这样便能根据销售策略动态替换原创 2011-08-15 16:46:30 · 282 阅读 · 0 评论 -
代理模式
代理模式的应用场景 第一:远程代理,也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。 第二:虚拟代理,是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。 第三:安全代理,用来控制真实对象访问时的权限。 第四原创 2011-08-15 16:39:08 · 252 阅读 · 0 评论 -
模板方法模式
模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 既然用了继承,并且肯定这个继承有意义,就应该要成为子类的模板,所有重复的代码都应该要上升到父类去,而不是让每个子类都去重复。原创 2011-08-15 16:26:40 · 331 阅读 · 0 评论 -
解释器模式
原创 2011-08-13 10:18:14 · 267 阅读 · 0 评论 -
享元模式
当Client需要一个Flywweight时,从FlyweightFactory获得,如果工厂没有则创建,如果存在则返回其指针,但工厂仍然保存此指针,当下一个需求到来时,同样返回此指针 这实际上是我们游戏资源管理方式,Flyweight保存了一个使用计数,每次从工厂取出一个资源原创 2011-08-13 10:29:39 · 297 阅读 · 0 评论 -
中介者模式
每个同事互相都不认识,但每个同事都认识中介(也就是同事类保存了中介类的指针),同事类只和中介者类通信,自己互相不通信原创 2011-08-13 10:37:51 · 282 阅读 · 0 评论 -
职责链模式
职责链和解释器区别是:解释器有一个分拆的过程,就像TCP/IP协议向上投递一样,而职责链会把数据原封不动的向下传递原创 2011-08-13 10:43:47 · 272 阅读 · 0 评论 -
命令模式
Waiter在创建Command时将Cooker也封装到Command中,Client也通知Waiter应该开始执行Command了 命令模式最大的特点是延迟执行命令,Client可以控制Command开始执行的时间原创 2011-08-13 10:58:51 · 337 阅读 · 0 评论 -
单件模式
//线程不安全惰性单件 template class CSingleton { protected: CSingleton(){} virtual ~CSingleton() { if(m_instance) delete m_instanc原创 2011-08-13 11:16:54 · 405 阅读 · 0 评论 -
备忘录模式
备忘录模式可以实现保存一个类的状态,并且可以撤销它原创 2011-08-15 14:27:22 · 307 阅读 · 0 评论 -
适配器模式
适配器模式使用于所需的类和现有的类接口不同的情况 Client需要一个Target接口的类,但现在只有Adaptee接口的类,所以构建一个适配器adapter,包含一个Adaptee对象,它继承Target的接口,并在内部用Adaptee去实现这些接口 适配器分为类适配器和对原创 2011-08-15 14:34:08 · 363 阅读 · 0 评论 -
状态模式
应该有一个状态管理器,保存当前状态 如果一个状态跳转的下一个状态是确定的,可以在状态管理器中进行跳转 如果一个状态跳转的下一个状态是不确定的,应该在自己的状态中根据条件进行跳转,这样可以分散逻辑,将复杂的跳转逻辑分散到各个状态是状态模式最重要的特征原创 2011-08-15 15:04:37 · 312 阅读 · 0 评论