C++设计模式
文章平均质量分 64
INGNIGHT
这个作者很懒,什么都没留下…
展开
-
抽象工厂模式
1.动机(Motivation)(1)在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时,由于需求的变化,往往存在更多系列对象的创建工作。(2)如何应对这种变化?如何绕过常规的对象创建方法(new),提供一种“封装机制”来避免客户程序和这种“多系列具体对象创建工作”的紧耦合?2.模式定义提供一个接口,让该接口负责创建一系列“相关或者相互依赖的对象”,无需指定它们具原创 2017-06-16 13:29:01 · 455 阅读 · 0 评论 -
职责链模式
1.动机(Motivation)(1)在软件构建过程中,一个请求可能被多个对象处理,但是每个请求在运行时只能有一个接受者,如果显示指定,将必不可少地带来请求发送者与接受者的紧耦合。(2)如何在运行时决定来处理请求,从而使两者解耦。2.模式定义使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的解耦关系。将这些对象连成一条链,并沿着这条链传递请求,知道有一个对象处理它为止。原创 2017-08-28 21:33:13 · 351 阅读 · 0 评论 -
代理模式
1.动机(1)在面向对象系统中,有些对象由于某种原因(比如对象创建的开销很大,或者某些操作需要安全控制,或者需要进程外的访问等),直接访问会给使用者,或者系统结构带来很多麻烦(2)如何在不失去透明操作对象的同时来管理/控制这些对象特有的复杂性?增加一层间接层是软件开发中常见的解决方式。2.模式定义为其他对象提供一种代理以控制(隔离,使用接口)对这个对象访问。原创 2017-08-06 19:52:09 · 353 阅读 · 0 评论 -
备忘录
1.动机(1)在软件构建过程中,某些对象在转换过程中,可能由于某种需要,要求程序能够回溯到对象之前处于某个点的状态。如果使用一些公有接口来让其他对象得到对象的状态,便会暴露对象的细节实现。(2)如何实现对象状态的良好保存与恢复?但同时又不会因此而破坏对象本身的封装性。2.模式定义在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原创 2017-08-06 16:39:23 · 349 阅读 · 0 评论 -
状态模式
1.动机(1)在软件构建过程中,某些对象的状态如果改变,其行为也会随之而发生变化,比如文档处于只读状态,其支持的行为和读写状态支持的行为就可能完全不同。(2)如何在运行是根据对象的状态来透明地更改对象的行为?而不会为对象操作和状态转化之间引入耦合2.模式定义允许一个对象在其内部状态改变时改变它的行为。从而使对象看起来似乎修改了其行为。原创 2017-08-06 15:59:26 · 359 阅读 · 0 评论 -
组合模式
1.动机(1)在软件在某些情况下,客户代码过多依赖于对象容器复杂的内部实现结构,对象容器内部实现结构(而非抽象接口)的变化将引起客户代码的频繁变化,带来了代码的维护性,扩展性等弊端(2)如何“将客户代码与复杂的对象容器结构”解耦?让对象容器自己来实现自己的复杂结构,从而使得客户代码就像处理简单对象一样来处理复杂的对象容器?2.模式定义将对象组合成树形结构以表示“部分-整体”的层次结原创 2017-08-12 21:51:15 · 304 阅读 · 0 评论 -
工厂方法模式
1.动机(Motivation)(1)在软件系统中,经常面临着创建对象的工作;由于需求的变化,需要创建的对象的具体类型经常变化。(2)如何应对这种变化?如何绕过常规的对象创建方法(new),提供一种“封装机制”来避免客户程序和这种“具体对象创建工作”的紧耦合?2.模式定义定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使得一个类的实例化延迟(目的:原创 2017-06-15 17:20:40 · 422 阅读 · 0 评论 -
装饰模式
1.动机(Motivation)(1)在某些情况下我们可能会“过度地使用继承来扩展对象的功能”,由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性;并且随着子类的增多(扩展功能的增多),各种子类的组合(扩展功能的组合)会导致更多子类的膨胀。(2)如何使“对象功能的扩展”能够根据需要来动态地实现?同时避免“扩展功能的增多”带来的子类膨胀问题?从而使得任何“功能扩展变化”所导致的影响将为原创 2017-06-14 15:57:12 · 359 阅读 · 0 评论 -
桥接模式
1.动机(Motivation)(1)由于某些类型的固有的实现逻辑,使得它们具有两个变化的维度,乃至多个纬度的变化。(2)如何应对这种“多维度的变化”?如何利用面向对象技术来使得类型可以轻松地沿着两个乃至多个方向变化,而不引入额外的复杂度?2.模式定义将抽象部分(业务功能)与实现部分(平台实现)分离,使它们都可以独立地变化。原创 2017-06-14 18:05:51 · 272 阅读 · 0 评论 -
观察者模式
1.动机1.在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系” ——一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密,将使软件不能很好地抵御变化。2.使用面向对象技术,可以将这种依赖关系弱化,并形成一种稳定的依赖关系。从而实现软件体系结构的松耦合。2.模式定义定义对象间的一种一对多(变化)的依赖关系,以便当一个对原创 2017-06-14 13:39:19 · 354 阅读 · 0 评论 -
策略模式
1.动机动机(Motivation)(1)在软件构建过程中,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都编码到对象中,将会使对象变得异常复杂;而且有时候支持不使用的算法也是一个性 能负担。(2)如何在运行时根据需要透明地更改对象的算法?将算法与对象本身解耦,从而避免上述问题?2.模式定义定义一系列算法,把它们一个个封装起来,并且使它们可互相替换(变化)。原创 2017-06-12 12:10:59 · 363 阅读 · 0 评论 -
享元模式
1.动机(1)在软件系统采用纯粹对象方案的问题在于大量细粒度的对象会很快充斥在系统中,从而带来很高的运行时代价-----主要指内存需求方面的代价。(2)如何在避免大量细粒度对象问题的同时,让外部客户程序仍然能够透明地使用面向对象的方式来进行操作?2.模式定义 运用共享技术有效地支持大量细粒度的对象。原创 2017-06-16 16:14:43 · 307 阅读 · 0 评论 -
单例设计模式共享数据分析、解决,call_once
一、设计模式大概谈“设计模式”:代码的一些写法,与常规的写法不太一样,程序灵活,维护起来很方便,但是别人接管、阅读代码很痛苦。用“设计模式”理念写出来的代码很晦涩。<< head first>>老外应付特别大的项目时候,把项目开发经验、模块划分经验,总结成设计模式。(现有开发需求,后有理论总结和整理)设计模式拿到中国来,不太一样,拿着一个程序(项目)往设计模...原创 2019-08-24 21:50:28 · 224 阅读 · 0 评论