C++设计模式
文章平均质量分 77
灬鬼谷灬
这个作者很懒,什么都没留下…
展开
-
23种设计模式(14)--Strategy模式
在软件构建过程中,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都编码到对象中,将会使对象变得异常复杂;而且有时候支持不使用的算法也是一个性能负担。如何在运行时根据需要透明地更改对象的算法?将算法与对象本身解耦,从而避免上述问题?定义一系列算法,把它们一个个封装起来,并且使它们可互相替换。该模式使得算法可独立于使用它的客户而变化。原创 2016-05-19 14:14:35 · 323 阅读 · 0 评论 -
23种设计模式(8)--Decorator模式
Decorator模式:动态的给一个对象额外添加一些额外职责。参与者: Component:定义对象接口,可以给这些对象动态的添加职责。 ConcreteComponent:定义一个对象,可以给这个对象添加职责。 Decorator:维持一个指向Component对象的指针,并定义一个与Co原创 2016-05-18 11:42:26 · 314 阅读 · 0 评论 -
23种设计模式(9)--Composite模式
何时使用组合模式: 当你发现需求中是体现部分与整体层次的结构时,以及你希望用户可以忽略组合对象与单个对象的不同,统一地使用组合结构中的所有对象时,就应该考虑用组合模式了。 基本对象可以被组合成更复杂的组合对象,而这个组合对象又可以被组合,这样不断地递归下去,客户代码中,任何用到基本对象的地方都可以使用组合对象了。 用户不用关心到底是处理一个叶节点还转载 2016-05-18 13:34:07 · 320 阅读 · 0 评论 -
23种设计模式(2)-AbstractFactory 模式
面向对象的设计原则:高内聚、低耦合软件重构原则:小步快跑------抽取的思想(抽取函数、抽取类、抽取接口);对扩展开放、对修改封闭设计模式分类如下:2、AbstractFactory 模式Factory模式创建的产品是相互独立的。若是要创建一组相关的产品,就要用到AbstractFactory 模式。与Factory模式相似,只需要满足每个工厂生产的产品为一组即可,那么不同的原创 2016-05-17 11:07:44 · 259 阅读 · 0 评论 -
23种设计模式(1)-factory 模式
面向对象的设计原则:高内聚、低耦合设计模式分类如下:原创 2016-05-17 10:41:24 · 322 阅读 · 0 评论 -
23种设计模式(3)--singleton模式
singleton模式是指单例模式,只允许存在一个实例。而且不允许被后续实例化。/*singleton*/class SingleTon{public: static SingleTon* Instance(); ~SingleTon();protected: SingleTon();//不允许后续实例化private: static SingleTon *pInstance原创 2016-05-17 11:59:46 · 313 阅读 · 0 评论 -
23种设计模式(10)--Flyweight模式
Flyweight模式结构:享元模式(Flyweight):运用共享的技术有效地支持大量细粒度的对象。抽象享元角色(Flyweight):此角色是所有的具体享元类的超类,为这些类规定出需要实现的公共接口或抽象类。那些需要外部状态(External State)的操作可以通过方法的参数传入。抽象享元的接口使得享元变得可能,但是并不强制子类实行共享,因此并非所有的享元对象都是可以共享的转载 2016-05-19 10:17:01 · 225 阅读 · 0 评论 -
23种设计模式(11)--Facade模式
Facade(外观)模式为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。实际上是为客户端和子系统之间添加一个层,客户端只能通过这个层来访问子系统,好比电话的接线员。如图:Facade模式结构图:Facade模式与Adapter模式有些相似之处,都是为上层提供一个可以访问的接口,不过不同之处是,Adapter原创 2016-05-19 10:52:45 · 327 阅读 · 0 评论 -
23种设计模式(12)--Proxy模式
代理模式结构图:代理模式到底好处在哪里呢??为其他对象提供一种代理以控制对某个对象的访问。 抽象角色(Subject):声明真实对象和代理对象的共同接口。 代理角色(Proxy):代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。同时,代理对象 可以在执行真实对象操作时,附加其他原创 2016-05-19 11:25:40 · 303 阅读 · 0 评论 -
23种设计模式(6)--Bridge模式
面向对象的设计原则:高内聚、低耦合软件重构原则:小步快跑------抽取的思想(抽取函数、抽取类、抽取接口);对扩展开放、对修改封闭设计模式分类如下:Bridge模式主要是解决多维度问题,什么意思呢?类似于n*m这个公式,n种抽象的接口,m种具体的实现,最多可以有n*m种组合方式。下面这篇文章对Bridge模式讲解的通俗易懂,于是转了过来。转: http://www.cnb原创 2016-05-18 10:37:24 · 4587 阅读 · 0 评论 -
23种设计模式(7)--Adapter模式
Adapter模式的实现比较简单,主要有两种实现的方式:类模式和对象模式。类模式主要是public继承接口,private继承Adaptee。对象模式主要是实现Adaptee,通过对象调用来实现功能。下面这篇文章对于Adapter讲的很好:转:http://www.cnblogs.com/houleixx/archive/2008/03/04/AdapterPattern.html原创 2016-05-18 10:55:22 · 432 阅读 · 0 评论 -
23种设计模式(5)--prototype模式
prototype模式是通过已经存在的对象来创建一个新的对象,类似于拷贝构造函数(暂不考虑浅层拷贝和深层拷贝)。结构如下:代码实现:/*prototype*/class Prototype{public: virtual ~Prototype(); virtual Prototype* Clone() const = 0;protected: Prototype(原创 2016-05-17 15:35:14 · 478 阅读 · 0 评论 -
23种设计模式(4)--builder模式
builder模式中的关键为director和builder,其中director为一个对象的的多个组成部分提供接口,而builder为组成对象一个个部分的实现细节。结构如下:代码实现1 Product/************************************************************************ * Prod原创 2016-05-17 15:02:58 · 339 阅读 · 0 评论 -
23种设计模式(15)--State模式
state模式是一个状态机,Context类是这个状态机的控制器,状态改变的实现在Context类中,各个状态下的行为也是由Context类来调用,各个状态分别用不同的类实现。state模式的结构图如下:代码实现:#include "iostream"using namespace std;class Context;class State{public: virt原创 2016-05-20 09:53:35 · 305 阅读 · 0 评论 -
23种设计模式(16)--Observer模式
Observer模式:观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。Observer模式结构:观察者模式:当一个对象的改变需要同时改变其他对象的时候,而且它不知道具体有多少对象有待改变时,应该考虑使用观察者模式。观察者模式所做的工作其实就是在解除耦合。让耦合的双方都依赖于原创 2016-05-20 10:33:19 · 248 阅读 · 0 评论 -
23种设计模式(17)--Memento模式
初识备忘录模式: 在软件中备忘录模式的使用时非常频繁的,并且备忘录模式又是比较简单的一种设计模式,所以可以说是性价比很高。比如我们玩中国象棋的时候需要悔棋,浏览网页时需要后退等等这些都是备忘录模式的应用。但在这里我们想说的是关于游戏进度保存的问题。当我们玩一款单机游戏的时候,可能我们突然有什么事要关机出去一段时间,或者好不容打到关底了,但是boss打不过还要重玩,这是我们可能也希望转载 2016-05-20 11:04:21 · 283 阅读 · 0 评论 -
23种设计模式(18)--Mediator模式
使用了Mediator模式,原来在各个对象内部所做的事情,现在全部移交到Mediator里了。也就是将分布在各个对象里面的协议处理过程,全部统一放在Mediator里去做了。骤看来,好像我们是把职责转移了,但是对于代码逻辑的清晰却有很大的好处,这个模式让我们能专注于各个对象之间的交互(他们的交互都放在Mediator类里去做了)。Mediator的核心思想就是把错综复杂的类间的关系独立出来,使得他原创 2016-05-24 09:58:56 · 290 阅读 · 0 评论 -
23种设计模式(19)---Command模式
命令(Command)模式属于对象的行为模式【GOF95】。命令模式又称为行动(Action)模式或交易(Transaction)模式。命令模式把一个请求或者操作封装到一个对象中。命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。命令模式是对命令的封装。命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象。每一个命令原创 2016-05-24 10:27:40 · 3599 阅读 · 0 评论 -
23种设计模式(20)--Visitor模式
"众口难调"出自宋·欧阳修《归田录》卷一:"补仲山之衮,虽曲尽于巧心;和傅说之羹,实难调于众口。"其原意是各人的口味不同,很难做出一种饭菜使所有的人都感到好吃。众口是否真的难调呢?其实有个不错的办法可以解决众口难调的问题,那就是吃"自助餐"。面对众口难调的问题去吃"自助餐"已经不是什么新鲜事,承办一个几百人、几千人的会议往往采用的都是自助餐的方式,让来宾各取所需,这就是所谓的以不变应万变。转载 2016-05-24 12:16:49 · 382 阅读 · 0 评论 -
23种设计模式(21)--Chain of Responsibility
一、 职责链(Chain of Responsibility)模式责任链模式是一种对象的行为模式【GOF95】。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织链和分配责任。从击鼓传花谈起转载 2016-05-24 16:02:45 · 272 阅读 · 0 评论 -
23种设计模式(22)--Iterator模式
Iterator模式C++实现转自:http://www.cnblogs.com/weiqubo/archive/2011/01/09/1931469.html作用:提供一种方法顺序访问一个聚合对象中各个元素,,而又不需暴露该对象的内部表示.UML结构图:解析:Iterator几乎是大部分人在初学C++的时候就无意之中接触到的第一种设计模式,因为在S转载 2016-05-24 16:16:25 · 461 阅读 · 0 评论 -
23种设计模式(23)--Interpreter模式
平心而论,之前的22个设计模式大多都是比较常见的,几乎做任何项目都有使用的价值。然而这个Interpreter模式则不然,其适用范围较小。正如其名,此模式大多用来解释一些(自定义的)独特语法,例如某些游戏开发引擎中读取XML文件,或是WindowsPhone开发中的XAML文件,都是使用此模式来进行的。与其说是一种模式,不如说是一种具有通用规范的行为更为准确。一个简单的例子:一份密码电报,转载 2016-05-24 16:43:00 · 446 阅读 · 0 评论 -
23中设计模式(13)--templete模式
面向对象的设计原则:高内聚、低耦合软件重构原则:小步快跑------抽取的思想(抽取函数、抽取类、抽取接口);对扩展开放、对修改封闭设计模式分类如下:在面向对象系统的分析和设计过程中经常会遇到一种情况:对于某个逻辑实现(算法实现)在不同的对象中有不同的细节实现,但是框架是相同的。Templete模式是采用继承的方式来实现这一点,将框架放到基类中,定义好细节的接口,子类中实现具体的细原创 2016-05-19 13:47:28 · 281 阅读 · 0 评论