C++设计模式
文章平均质量分 73
火-狐-狸
不要怀疑现在所做的努力,要坚定不移的相信——量变引起质变!不要质疑你自己能走多远,只是默默向前,当你抬起头时你会看见成功!
展开
-
设计模式之简单工厂模式
最近有点空闲,就总结一下编程中遇到的设计模式吧,也算是增强一下记性。 首先我们说一下工厂模式,这个工厂模式呢,又分为简单工厂模式、工厂方法模式(多态工厂模式)、抽象工厂模式这三种,这三种我都会陆续讲到。原创 2015-10-19 18:09:22 · 588 阅读 · 0 评论 -
设计模式之适配器模式
上篇我们讲了代理模式,这篇我们来聊聊适配器模式,适配器模式也是种使用较频繁的设计模式,应用于以下场景,比如A之前访问B,但是有一天B升级了,提供的外部接口方法名变了,这时为了A任然能用旧接口名访问B,我们就给B添加一个包装类C,C对外提供的访问接口名和B的旧接口名一样,这样A就访问C,然后C再访问B。有点类似于代理模式都是增加中间层来解耦合,但是代理模式是为了让C和B的任何对外接口一致,实现A访问B相比A访问C感觉不到差异,而不是兼容旧接口。原创 2015-12-09 16:44:03 · 834 阅读 · 2 评论 -
设计模式之代理模式
上篇我们讲了组合模式,这篇咱们来聊聊代理模式,代理模式的应用场景很多,代理模式的本质就是将原对象隐藏起来,构造一个和原对象相同父类的代理对象,对外的功能接口也和原对象保持一致,外部程序只需要调用代理对象的接口即可,然后具体实现再由代理对象去调用原对象接口。这样就完全将原对象隐藏和保护起来了,当然,代理对象还可以针对不同权限的外部程序提供对原对象不同的访问权限。原创 2015-11-25 20:55:58 · 740 阅读 · 0 评论 -
设计模式之观察者模式
上篇我们讲了策略模式,这篇我们再来聊聊观察者模式,观察者模式也是一种应用广泛的设计模式,比如一些树型结构的游戏引擎,父节点和子节点的联动等。观察者模式的本质就是建立目标对象和观察者对象之间一对多的依赖关系,当目标对象状态发生改变时,观察者对象的状态也自动随之改变。原创 2015-10-28 11:31:49 · 1579 阅读 · 1 评论 -
设计模式之策略模式
上篇我们讲了迭代器模式,这篇我们再来讲一下使用率很高的策略模式,策略模式的本质就是实现算法的复用,将环境调用中的算法抽象出来单独为类,环境调用就只调用算法的抽象类,要添加或修改算法时就只修改算法的具体类就可以了,不影响环境类,符合开闭原则,非常方便。原创 2015-10-27 10:05:56 · 657 阅读 · 0 评论 -
设计模式之迭代器模式
上篇我们讲了外观模式,这篇我们再来看看迭代器模式,这也是一种使用频率很高的模式。通常的数据存储聚合类中,既包括数据存储的功能又包括对这些数据遍历的功能,而要修改聚合类,既得修改数据存储又得修改遍历功能,非常繁琐,也不符合单一职责原则。迭代器模式的核心思想是将数据存储和数据遍历分开,让数据遍历的方法单独组成一个迭代器的类,基本架构:一个抽象聚合类(包括数据存储和抽象遍历类),一个具体聚合类(包括数据存储和具体遍历类),一个抽象遍历类,一个具体遍历类。这样当我们有新的产品需求如添加一个新的具体聚合类的时候,我们原创 2015-10-26 14:38:52 · 644 阅读 · 0 评论 -
设计模式之外观模式
由以上看出外观模式本质上是在外部调用和内部子系统直接增添了一个中间层Facade类,由该类来代为调用内部子系统方法,而外部调用不需要了解内部系统的细节。传统调用方式和外观模式调用方式就好比自助餐饭店和普通饭店点餐的区别,自助餐饭店要自己知道饭菜放在房间哪个位置,要吃什么菜都得自己去一个个拿。而普通饭店不需要知道饭菜放在哪里,要吃什么只需要通知服务员就可以了,然后服务员去拿。这个服务员角色就类似于外观模式中的Facade类。原创 2015-10-21 11:29:42 · 646 阅读 · 0 评论 -
设计模式之组合模式
组合模式是一种对象结构型模式,一般用于树型结构中,其本质是定义一个抽象组件类,该组件既可以代表叶子对象也可以代表容器对象(容器可以包含叶子和容器),使用时无需知道操作对象是叶子还是容器,实现对容器和叶子的无差别化操作。对子容器的节点操作时,本质上使用了递归遍历。原创 2015-11-04 17:30:46 · 657 阅读 · 0 评论 -
设计模式之单例模式
在上面我们可以看到经典单例模式的构造过程:首先要该类不被其他外部调用实例化,就要将构造函数设为私有权限,然后又通过公共的静态方法来实例化这个类,返回实例化后的对象的指针,然后通过内部私有指针mInstance来保存这个返回的指针,这样我们就可以使用这个类了。但是怎么来保证这个实例的唯一性呢?我们在静态方法getInstance()中要先判断,如果mInstance是为NULL的(mInstance要初始化为NULL),那么我们才实例化这个类。原创 2015-10-20 18:01:17 · 577 阅读 · 0 评论 -
设计模式之抽象工厂模式
由以上可以看出抽象工厂模式和工厂方法模式最大的不同是在抽象工厂模式中,一个工厂里可以生产多个产品,而在工厂方法模式中一个工厂就只能生产一种产品。可能有些人觉得这抽象工厂模式和简单工厂模式不就差不多了吗? 我们再来看看抽象工厂模式和简单工厂模式的区别:首先简单工厂模式是没有多态工厂的实现的,也就是说简单工厂模式没有工厂基类。其次简单工厂模式的工厂里生产的产品可以是任意产品,没有产品族的概念。而抽象工厂模式里同一个工厂生产的产品是属于同一产品族的,一般来说这些产品的种类几乎是稳定不变的,所以不会频繁改变一个工厂原创 2015-10-20 09:58:03 · 600 阅读 · 0 评论 -
设计模式之工厂方法模式
上篇我们讲了简单工厂模式,也提到了简单工厂模式的缺点,这篇我们来讲一下工厂方法模式,而工厂方法模式在一定程度上避免了简单工厂模式的那些缺点,废话不多说,上代码咯。原创 2015-10-19 18:36:47 · 579 阅读 · 0 评论 -
设计模式之命令模式
命令模式是一种很巧妙很强大的设计模式,比如常见的操作系统里面的消息队列等消息发送机制都用到了命令模式,良好的命令模式设计主要解决以下两点,1,命令发起者和命令发送方式的耦合度(即命令发起者可以有不同的命令发送方式),2.命令发送方式与命令的耦合度(即每种命令发送方式可以发送任何类型的命令)。我这示例的命令发送方式用消息队列实现,这也是最常见的一种方式。原创 2016-02-23 18:45:18 · 686 阅读 · 0 评论