随笔分类 - 设计模式
摘要:访问者模式意图在不改变目标对象类结构的情况下,扩展对象类的行为。新扩展的行为均被封装成类对象的形式来动作。应用该模式时,往往目标类系与Visitor类系是两个不同的类系,它们配合工作但维护是分开的,互不影响。每次扩展一个新行为时,需要新增加一个Visitor派生类。而目标类系只需要接受Visitor
阅读全文
摘要:模板方法意图是为算法定义好骨架结构,并且其中的某些步骤延迟到子类实现。该模式算是较为简单的一种设计模式。在实际中,应用也较为频繁。模式的类关系图参考如下: 模式的编码结构参考如下: 1 namespace template_method 2 { 3 class IAbstractClass 4 {
阅读全文
摘要:策略模式意图将解决问题的算法分别封装成一个个对象的形式,并使这些算法对象相互间可被替换。模式比较简单,对于策略对象结构的设计,可抽象一个抽象基类,并定义好相关算法(纯)虚接口,并由各种具体的实现算法子类实现即可。因此模式的类关系结构图参考如下: 模式编码结构参考如下: 1 namespace str
阅读全文
摘要:状态模式其意图是在一个对象的状态发生变化时能够同时改变它的行为。一个生活中比较常见的例子就如你(是指你自己本人)在走时时,整个人全身的动作是双手臂前后慢慢摇摆且双脚也是一步一步慢慢往前移的,即:该走路状态下,你所对应的是走路动作;在跑步时,你的双手双脚动作明显频率、步伐都加快,即:在跑步状态下,你所
阅读全文
摘要:观察者模式意图解决一对多的依赖关系情形中,当被依赖对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新的问题。举个很简单的例子说,假如一个游戏中的角色的某个属性状态发生了变化,此处不妨假设为角色的等级升级了,则相应的在游戏场景中的模型展现([依赖点1])需要跟着调整,并且在UI界面上的角色
阅读全文
摘要:备忘录模式顾名思义就是一种能有备忘作用的设计模式,其目的是在对象外部保存其在某一时刻的状态信息,并且在任何需要的时候,都可以通过备忘录中保存的状态数据恢复对象在当时情形下的状态。 备忘录模式旨在对象的外部保存其状态。因此,对于备忘录对象将会有一个维护者 MementoManager 对象,用于维护对
阅读全文
摘要:中介者模式目的是将对象间的交互封装在一个对象中,从而使用各对象间的相互依赖解耦,并可以独立更改对像间的交互。在实际项目开发过程中,因某些原因(如:业务逻辑处理不当或设计不当等)使得多个不同对象间需要相互(引用)访问,无形当中使得原本几个不相干的或相对较为独立的几个模块产生了相互依赖。随着依赖程度的恶
阅读全文
摘要:迭代器模式提供一种方法顺序访问聚合对象中的各个元素,而又不需要暴露该聚合对象的内部表示。对于该模式,估计几乎所有的人都使用过,在此直接给出类结构图参考如下: 如前所述,迭代器模式的思想主要是:一能提供顺序访问各个元素且不需要暴露内部细节;二是要能够访问具体 元素。从而达到简化聚合对象的接口的目的 。
阅读全文
摘要:解释器模式意图为给定的语言定义其文法表示,同时定义该文法表示的一套解释器来解释语言中的句子。该模式说的简单通俗点,其主要用途是用来解释用的。至于解释什么,则要看具体的上下文环境。我们可以为一个表达式专门写一个解释器、也可以为一个语句写一个解释器,一个语句可以看成是由多个表达式构成的、因此,我们同样可
阅读全文
摘要:命令模式是指将用户的请求封装成(命令)对象,从而可将用户不同的请求进行参数化、对这些请求排序或记录请求日志、以及支持回滚恢复操作。记得以前刚开始使用Photoshop时,就发现它的操作历史记录面板特别好用,现在想想,其实也可以通过命令模式来设计。命令模式主要是将请求抽象成对象,以此作为中间的一个中转
阅读全文
摘要:职责链模式将对象的请求处理组成链式结构,并将请求按链式结构逐个传递下去,直接被其中的某个处理者处理为止。由此可知,职责链模式的适用场合是对指定请求,可以有多个请求处理者(或称为请求响应者),但用户并不知道(也不需要知道 此如做到请求者与响应者的解耦合)当时运行环境下该请求会被具体的哪个处理者处理(又
阅读全文
摘要:代理模式是指为其他对象提供代理来控制对象的访问。这种手段有时候可以给我们带来许多好处。如:通过代理可以实现异步响应处理;通过代理可以起到保护或限制对象的使用的作用,从而提高安全性。 在设计上,用户使用代理对象与直接使用被代理对象,应该没什么差异。因此,代理对象的设计,需要实现被代理对象的相应接口。模
阅读全文
摘要:享元模式的主要目的、意图是为对象的大量使用提供一种共享机制。该模式的思想重在复用、共享复用。像文字、列表中的格子等这类多数都是需要考虑复用技术,否则必将大量耗费内存空间而使资源以及性能等大量耗费。该模式的类关系图参考如下: 模式的编码结构参考如下: 1 namespace flyweight 2 {
阅读全文
摘要:外观模式主要意图是为子系统提供一个统一的接口,从而使用用户对子系统的直接依赖中,解耦合出来。Facade主要是通过为子系统统一封装个入口一样,原先用户对子系统的接口、类等都是直接访问,现在要通过Facade这层封装来访问,它就好比是个中转站、一个杂货店一样。 软件工程中就提供多层设计,最常见的就是两
阅读全文
摘要:装饰模式主要意图是为对象扩展额外的职责,但对于用户来说,在使用行为上并没有任何的变化。在此举一个例子来解释该模式的含义。假如你手上有一张照片,此时可以给它盖上一片玻璃片,同时再套上一个精美的相框。如此相片就更好看同时又被更好地防护起来。此处的玻璃片以及相框,对于原来的照片来说,都是起到一个装饰的作用
阅读全文
摘要:组合模式意在将对象组合成树形结构以表示部分与整体的层次结构关系,并且用户对单个对象的操作以有对组合对象的操作都是一致的。即:组合对象 is-a 单个对象,同时又可以组合着 n 个的单个对象(甚至于其他组合对象也可以)。当对一个组合对象执行某行为会被转化为对其所组合的 n 个对象进行操作。一个组合对象
阅读全文
摘要:桥接模式是为了将对象的抽象与实现分离,使得它们可以独立变化。简简单单的一句话,却已经是站在了更高抽象层面上来看待、设计、解决问题。平常我们多是对具体问题进行分析、抽象,然后就开始设计,这对多数情况下基本完全够用,毕竟实际项目中的功能模块都是找一“最优解的"实现来解决掉问题,把功能设计出来即可。这种情
阅读全文
摘要:Adapter模式主要意图是将类或接口转换成客户期望的接口,从而使得原本不兼容、无法在一起工作的接口可以在一起工作。该模式有两种形式的Adapter法,一是继承方式;二是对象关联依赖方式。 继承方式Adapter法,相比之下,耦合性更强些,并且毕竟依赖于静态继承,如果被适配的对象有多个(派生)版本的
阅读全文
摘要:生成器模式的主要思想:将产品对象的创建与表现分离开,并且同样的创建过程可以有不同的产品表现。 直白一点可以理解为:待创建的对象是复杂的,一般情况下是需要经过多个步骤的创建后,最终才能将完整产品创建好,而且每个步骤所创建的都只是产品的一部分而已。这一切的创建步骤,由统一的执导者来完成,称之为:Dire
阅读全文
摘要:原型模式主要是用原型实例指定创建原型对象的种类,并且通过拷贝原型创建新对象。最简单的理解就是克隆。就如cocos2d-x中的 class Clonable::clone();该模式的主要目的是可以在运行时,随时创建出某个对象的副本,并且副本具有与本体一样的状态信息。类图参考如下: 模式的编码结构参考
阅读全文

浙公网安备 33010602011771号