
C++设计模式
langb2014
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++设计模式[四]原型模式
这一篇就是原型模式;在GOF的《设计模式:可复用面向对象软件的基础》中是这样说的:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。这这个定义中,最重要的一个词是“拷贝”,也就是口头上的复制,而这个拷贝,也就是原型模式的精髓所在。举一个最简单的例子来说明原型模式:记得上小学的时候,老师把需要做的课外习题写到黑板上,而下面的我们都要把这些题抄写到自己的本子上,回家做好,第二天交转载 2015-11-04 14:42:38 · 535 阅读 · 0 评论 -
C++设计模式[十四]解释器模式
1原创 2015-11-21 15:54:44 · 846 阅读 · 0 评论 -
C++设计模式[十五]迭代器模式
对聚合类(如列表)的访问和遍历从列表对象中分离出来,并放入一个迭代器对象中迭代器定义了一个访问该列表元素的接口,迭代器负责跟踪当前的元素,即知道哪些元素已经遍历过了,如下图所示:Iterator:定义迭代器访问和遍历元素的接口;ConcreteIterator:实现具体的迭代器;Aggregate:定义的容器,创建相应迭代器对象的接口;ConcreteAggregate:具原创 2015-11-23 15:53:16 · 1135 阅读 · 0 评论 -
C++设计模式[十六]中介者模式
这个模式正如名字所言就是一个中介者,不管两者有什么方法属性,通过中介然后建立一种关系并实现。Mediator:中介者,它定义了一个接口用于与各个Colleague对象通信;ConcreteMediator:具体的中介者,它通过协调各Colleague对象实现协作行为;并了解和维护它的各个Colleague;Colleague:同事类,每一个同事类都知道它的中介者对象;每一个同时对象原创 2015-11-23 16:01:23 · 874 阅读 · 0 评论 -
C++设计模式[十八]观察者模式
观察者模式是这样说的:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。当一个对象发生了变化,关注它的对象就会得到通知;这种交互也称为发布-订阅(publish-subscribe)。目标是通知的发布者,它发出通知时并不需要知道谁是它的观察者。观察者模式显然是观察,我观察某个东西在跑在跳,就是那个物体状态发生变化,当然观察这个物体的原创 2015-11-26 15:44:03 · 867 阅读 · 1 评论 -
C++设计模式[十九]状态模式
状态模式:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。状态模式的重点在于状态转换,很多时候,对于一个对象的状态,我们都是让这个对象包含一个状态的属性,这个状态属性记录着对象的具体状态,根据状态的不同使用分支结构来执行不同的功能,就像上面的代码那样处理;就像上面说的,类中存在大量的结构类似的分支语句,变得难以维护和理解。Context:定义客户端感兴趣的接原创 2015-11-26 20:28:55 · 758 阅读 · 1 评论 -
C++设计模式[十七]备忘录模式
备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。说白了就是保存功能,像我们玩游戏时的及时保存操作。一个备忘录是一个对象,它存储另一个对象在某个瞬间的内部状态,而后者称为备忘录的原发器。当需要设置原发器的检查点时,取消操作机制会向原发器请求一个备忘录。原发器用描述当前状态的信息初始化该备忘录。只有原发器可以原创 2015-11-26 13:48:56 · 870 阅读 · 0 评论 -
C++设计模式[二十]策略模式
策略模式当然要讲策略,出现什么情况就创建什么对象,每个对象方法名相同,方法的实现差别很大。Strategy:定义所有支持的算法的公共接口。Context使用这个接口来调用某ConcreteStrategy定义的算法;ConcreteStrategy:实现Strategy接口的具体算法;Context:使用一个ConcreteStrategy对象来配置;维护一个对Stategy对象的原创 2015-11-26 20:54:05 · 767 阅读 · 1 评论 -
C++设计模式[二十二]模板方法模式
这是最后一种模式,前面学习文章都是随机按照顺序排的,学到最后一个估计对c++也了解认识了许多了吧,模板顾名思义就是一个模子,通过模子来刻出许多类。AbstractClass(抽象类):定义抽象的原语操作,具体的子类将重定义它们以实现一个算法的各步骤。主要是实现一个模板方法,定义一个算法的骨架。该模板方法不仅调用原语操作,也调用定义在AbstractClass或其他对象中的操作。Conc原创 2015-11-27 15:42:25 · 1030 阅读 · 1 评论 -
C++设计模式[二十一]访问者模式
当我们去充话费时人比较多,我们改为明天去,对于营业厅的业务是不变的,不管是客户今天去还是明天去;对于客户的操作是变化的,可能今天是某种充100得300的活动截止日期,所以人比较多,明天去只能按照正常业务充值。就像后面的数据结构(营业厅)与作用于结构上的操作(客户充值)。Visitor模式在不破坏类的前提下,为类提供增加新的新操作。下面看一下正式点的解释:访问者模式(Visitor)分离了类原创 2015-11-27 13:39:06 · 850 阅读 · 0 评论 -
C++设计模式[一]工厂模式
一直想好好学习一下设计模式,终于发现了一个通熟易懂的C++设计模式解释,最近有点懒,然后大部分内容掌握一下就转过来了,其中有些注释自己加的,有什么错误,请指正,谢谢。================================================================================================对于中间代码实现和大部分内容归作者...原创 2015-11-03 13:30:12 · 1976 阅读 · 0 评论 -
设计模式23种通熟解释和简明教程
1、factory(工厂)追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德 基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory 工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建原创 2015-11-03 15:14:46 · 2767 阅读 · 0 评论 -
C++设计模式[二]单例模式
接着就是单例模式;个人理解就是把创建方法改为私有,然后再内部实例化,禁止外部创建对象。何为单例模式,在GOF的《设计模式:可复用面向对象软件的基础》中是这样说的:保证一个类只有一个实例,并提供一个访问它的全局访问点。首先,需要保证一个类只有一个实例;在类中,要构造一个实例,就必须调用类的构造函数,如此,为了防止在外部调用类的构造函数而构造实例,需要将构造函数的访问权限标记为protecte原创 2015-11-03 16:11:06 · 1801 阅读 · 0 评论 -
C++设计模式[十一]代理模式
在某些情况下,一个客户不想或者不能直接引用一个对 象,此时可以通过一个称之为“代理”的第三者来实现 间接引用。代理对象可以在客户端和目标对象之间起到 中介的作用,并且可以通过代理对象去掉客户不能看到 的内容和服务或者添加客户需要的额外服务。通过引入一个新的对象(如小图片和远程代理 对象)来实现对真实对象的操作或者将新的对 象作为真实对象的一个替身,这种实现机制即 为代理模式,通过引入代原创 2015-11-15 15:55:37 · 792 阅读 · 0 评论 -
C++设计模式[六]桥接模式
尽管下面的原作者说明已经很详细了但是还是没能理解到底什么时候才用,和怎么敲代码。。。。。参阅一些资料才慢慢理解了点东西,先不说抽象类和实现类,因为抽象类就是我们说的接口,实现类其实还是个抽象,所以我开始分不清这两个到底是什么关系。看看我的理解,首先要设计出一个大的接口,这个接口是所有下面抽象类的抽象,然而这些抽象类就是所说的维度变化,比如下文说的形状啊颜色啊。看我画的图:然后关转载 2015-11-05 14:00:52 · 889 阅读 · 0 评论 -
C++设计模式[五]适配器模式
什么是适配器模式?在GOF的《设计模式:可复用面向对象软件的基础》中是这样说的:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。好比日本现在就只提供110V的电压,而我的电脑就需要220V的电压,那怎么办啦?适配器就是干这活的,在不兼容的东西之间搭建一座桥梁,让二者能很好的兼容在一起工作。为什么要使用适配器模式?在转载 2015-11-04 20:25:30 · 632 阅读 · 0 评论 -
C++设计模式[八]装饰模式
在GOF的《设计模式:可复用面向对象软件的基础》一书中对装饰模式是这样说的:动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。装饰模式能够实现动态的为对象添加功能,是从一个对象外部来给对象添加功能。通常给对象添加功能,要么直接修改对象添加相应的功能,要么派生对应的子类来扩展,抑或是使用对象组合的方式。显然,直接修改对应的类这种方式并不可取。在面向对象的原创 2015-11-09 20:25:53 · 927 阅读 · 0 评论 -
C++设计模式[七]组合模式
什么是组合模式?在GOF的《设计模式:可复用面向对象软件的基础》一书中对组合模式是这样说的:将对象组合成树形结构以表示“部分-整体”的层次结构。组合(Composite)模式使得用户对单个对象和组合对象的使用具有一致性。组合模式(Composite)将小对象组合成树形结构,使用户操作组合对象如同操作一个单个对象。组合模式定义了“部分-整体”的层次结构,基本对象可以被组合成更大的对象原创 2015-11-06 11:17:38 · 829 阅读 · 0 评论 -
C++设计模式[九]外观模式
今天学习的是外观模式,其实很简单,看一下下图就知道它的作用了:外观角色(Facade):是模式的核心,他被客户client角色调用,知道各个子系统的功能。同时根据客户角色已有的需求预订了几种功能组合。子系统角色(Subsystem classes):实现子系统的功能,并处理由Facade对象指派的任务。对子系统而言,facade和client角色是未知的,没有Facade的任何相关原创 2015-11-10 21:48:22 · 924 阅读 · 0 评论 -
看懂UML类图和时序图
从一个示例开始¶请看以下这个类图,类之间的关系是我们需要关注的:车的类图结构为>,表示车是一个抽象类;它有两个继承类:小汽车和自行车;它们之间的关系为实现关系,使用带空心箭头的虚线表示;小汽车为与SUV之间也是继承关系,它们之间的关系为泛化关系,使用带空心箭头的实线表示;小汽车与发动机之间是组合关系,使用带实心箭头的实线表示;学生与班级之间是聚合关系,使用带空心箭头的实线表转载 2015-11-15 13:57:15 · 2407 阅读 · 0 评论 -
C++设计模式[三]建造者模式
一个复杂对象的创建,其通常是由很多的子对象构成;如果一个对象能够直接就创建好了,那么也不会称之为复杂对象。由于项目中需求的变化,这个复杂对象的各个部分经常会发生剧烈的变化,但是,不管怎么变化,将它们组合在一起,组成一个复杂的对象的事实是不会变的。建造者模式就提供了一种“封装机制”来将各个对象的变化隔离开,最终,组合成复杂对象的过程是不会变的。例举了一个很好的例子————建造小人。建造一转载 2015-11-03 20:52:27 · 506 阅读 · 0 评论 -
C++设计模式[十二]职责链模式
职责链模式是这样说的:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,直到有一个对象处理它为止;Handler:定义了一个处理请求的接口;其它类如果需要处理相同的请求,可以实现该接口就好了;ConcreteHandler:处理它所负责的请求,如果可处理该请求,就处理掉这个请求;否则将该请求转发给它的下一个可以处理该请求的对象,所以它原创 2015-11-15 16:47:10 · 746 阅读 · 0 评论 -
C++设计模式[十三]命令模式
在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来进行设计,使得请求发送者与请求接收者消除彼此之间的耦合,让对象之间的调用关系更加灵活。命令模式可以对发送者和接收者完全解耦,发送者与接收者之间没有直接引用关系,发送请求的对象只需要知道如何发送请求,而不必知道如何完原创 2015-11-15 17:06:16 · 1391 阅读 · 0 评论 -
C++设计模式[十]享元模式
所谓享元模式就是运行共享技术有效地支持大量细粒度对象的复用。系统使用少量对象,而且这些都比较相似,状态变化小,可以实现对象的多次复用。共享模式是支持大量细粒度对象的复用,所以享元模式要求能够共享的对象必须是细粒度对象。在了解享元模式之前我们先要了解两个概念:内部状态、外部状态。 内部状态:在享元对象内部不随外界环境改变而改变的共享部分。 外部状态:随原创 2015-11-11 15:26:38 · 1483 阅读 · 1 评论 -
python重温设计模式===>创建型
前面c++粗略学习过一次,忘记了,现在回想回想。Github:https://github.com/faif/python-patternssimple_factory.py#!/usr/bin/env python# encoding: utf-8"""简单工厂模式增加操作: 1. 增加对应子类 2. 修改工厂类"""class Operatio原创 2017-02-06 15:37:15 · 816 阅读 · 0 评论