![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Design Patterns
文章平均质量分 94
werben
只用一样东西,不明白它的道理,实在不明智。
展开
-
设计模式之解释器模式
【原文转自】http://blog.csdn.net/freshow/article/details/5772307解释器模式(interpreter),给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。解释器模式需要解决的是,如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建转载 2012-08-29 22:25:06 · 414 阅读 · 0 评论 -
设计模式之访问者模式
【原文地址】http://blog.csdn.net/hityct1/article/details/4164393访问者模式(Visitor Pattern)的c++实现示例访问者模式是一种分离对象数据结构与行为的方法,通过这种分离,可以为一个已存在的类或类群(即被访问者)增加新的操作(即访问者)而无需为它们作任何修改。访问者模式属于行为型模式。 为什么要使用访问者模转载 2012-08-29 22:39:38 · 570 阅读 · 0 评论 -
设计模式之单例模式
【定义】单例模式(SingleTon),保证一个类仅有一个实例,并提供一个访问它的全局访问点。【场景】很多exe文件都只允许运行一次,即当你第一个exe打开未关闭之前,再第二次打开,会提示说“已经有一个exe程序在运行了”,如果将这个exe文件看成一个类,则它就是一个单例。【UML】【代码】//下面的代码没有考虑多线程下的锁定#include using names原创 2012-08-21 23:20:09 · 480 阅读 · 0 评论 -
设计模式之迭代器模式
【定义】迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。【场景】下面是一个Int型的数组,这里实现一个遍历该数组的迭代器。如果又有一个新的数组,而数组里面的数据是class Car,则实现一个class CarArray即可,迭代器类是基于模版的,即Array的数据类型是无关的。【UML】【代码】/* *原创 2012-08-21 21:49:41 · 463 阅读 · 0 评论 -
设计模式之桥接模式
【定义】桥接模式(Bridge),将抽象部分与它的实现部分分离,使他们都可以独立地变化。【场景】继承实际上是一种非常紧密的依赖关系,也即父类实现中的任何变化都将会导致子类发生变化。以手机为例,手机包括品牌和操作系统,假设现在手机品牌分三种:三星,苹果,诺基亚,而手机软件按系统来分也有两种:安卓,IOS。假设一个品牌和一个系统就可以组成一个手机。首先,手机肯定是一个抽象的对象,按品牌来分可以原创 2012-08-22 23:15:01 · 2388 阅读 · 0 评论 -
设计模式之中介者模式
【定义】中介者模式(Mediator),用一个中介对象来封装一系列的对象交互。中介者使各个对象不需要显示地相互应用,从而使其耦合松散,而且可以独立的改变它们之间的交互。【场景】一个窗口中有两个控件,一个按钮Button和编辑框Label,现在要单机按钮则编辑框改变文本,如果将编辑框改变文本的代码放到按钮的单机事件处理函数里面,那这两个对象便是耦合的。现在可以将窗口Window作为一个中介者原创 2012-08-26 19:17:46 · 404 阅读 · 0 评论 -
设计模式之命令模式
【定义】命令模式(Command),将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。【场景】这里以向窗口发送消息和窗口处理消息为例(有些牵强,UI窗口的消息管理其实可以用这个设计模式模拟实现,将Invoker改成MessageManager,set_message()改成为增加消息映射,将Window抽象成接口)。【UM原创 2012-08-26 15:24:20 · 497 阅读 · 0 评论 -
设计模式之职责链模式
【定义】职责链模式(Chain of Responsibility),使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的偶合关系。将这个对象练成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。【UML】【代码】#include using namespace std;class Handle{protected: Handle* next原创 2012-08-26 16:28:34 · 483 阅读 · 0 评论 -
设计模式之享元模式
【定义】享元模式(Flyweight),运用共享技术有效的支持大量细粒度的对象。【场景】依旧以手机为例,手机有很多属性,品牌,手机号码,手机颜色等,现在假设手机有品牌和手机号码两种属性。手机品牌有Iphone,Sumsung,Nokia三种,但是手机号码却有千千万万,这千千万万的手机号码便是大量的细粒度的对象。为了减少对内存空间的需求,可以将号码提取出来单独存储,这样便只需要创建3个对象就原创 2012-08-26 23:49:48 · 409 阅读 · 0 评论 -
设计模式之组合模式
【定义】组合模式(Composite),将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。【场景】现在我们自己实现几个简单的基本控件(如按钮Button、文本编辑框Label)等;而实际上窗口也算上一个控件,只是窗口可以有子窗口,但最终窗口还是得由以上的这些Button,Label组成。这里窗口是整体,基本控件是部分。那我们怎么把基本控件原创 2012-08-15 21:24:49 · 445 阅读 · 0 评论 -
设计模式之适配器模式
【定义】Adapter,将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。【场景】姚明在NBA打球,他和火箭的其他队友打得都是篮球,但首先姚明英文很差,为了让他和其他球员有效的沟通,这时可以为他实现一个语言的适配器,也就是请一个翻译,在适配器的帮助下,姚明即能使出球技也能正常英文沟通,表现的和其他美国球员一样。【UML】原创 2012-08-01 00:02:23 · 507 阅读 · 0 评论 -
简单工厂和策略模式的区别
今天看到这两个模式,发现其实区别不大。简单工厂中的Factory类只负责创建各个concrete子类,注重创建对象。策略模式则注重调用创建的concrete的方法,注重实施策略。原创 2012-02-07 20:13:26 · 500 阅读 · 0 评论 -
简单工厂 工厂方法 抽象工厂
【找到一篇好文章】 作者:海粟007 原文址:http://www.cnblogs.com/Seasky/archive/2009/04/28/1385609.html 今天开始这个系列之前,心里有些恐慌,毕竟园子里的高手关于设计模式的经典文章很多很多,特别是大侠李会军、吕震宇 老师的文章更是堪称经典。他们的文笔如行云流水,例子活泼生动,讲解深入浅出。好在他们都是用C#描述,也没有提供转载 2012-01-04 23:19:26 · 4328 阅读 · 0 评论 -
设计模式之原则
一、单一职责原则(SRP)就一个类而言,应该仅有一个引起它变化的原因。二、开放-封闭原则(OCP)软件实体(类、模块、函数等)应该可以扩展,但是不可以修改。也即对于扩展是开放的(Open for extension),对于更改是封闭的(Closed for modification)。面对需求,对程序的改动是通过增加新代码进行的,而不是更改现有的代码,开放-封闭原则是面向对象设计的核心转载 2012-02-14 18:08:13 · 515 阅读 · 0 评论 -
设计模式之模版方法模式
【定义】定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模版方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。【场景】模版方法模式是通过把不变行为搬移到超类,去除子类中的重复代码来体现她的优势。当不变的和可变的行为在方法的子类实现中混合在一起的时候,不变的行为在子类中重复出现。通过模版方法模式把这些行为搬移到单一的超类中去。 如下面则是将TemplateMethod的实原创 2012-06-07 16:43:52 · 322 阅读 · 0 评论 -
设计模式之简单工厂
介绍:从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。UML图示:代码实现:class Operator{private: d原创 2012-02-14 17:12:29 · 650 阅读 · 0 评论 -
设计模式之观察者模式
【定义-Intent】Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically. 定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态原创 2012-06-11 16:13:56 · 413 阅读 · 0 评论 -
设计模式之建造者模式
【定义】建造者模式(Builder),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。【场景】一个简单的XML解析器,XML解析可以分两部分,第一部分:开始标签,结束标签,属性等,这部分对于所有的XML文件处理都是一样的,因为每个XML都由开始标签,结束标签等构成;第二部分:标签名,标签属性名,标签属性值等,这一部分会随着XML的不同,会有不同的处理,因为每个XML的原创 2012-06-11 10:57:41 · 396 阅读 · 0 评论 -
设计模式之原型模式
【定义】用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。【情景】假设现在在一家公司应聘,对方要求填写求职信息表,多位面试官每人都要一份,需要手工填写。现在有两种方式可供选择:a、手工填写多份信息表; 2、手工填写一份,然后剩下的拿填写完得第一份复印。第二种方式就是这里所说的原型模式,第一份手工填写的信息表就是一个原型。一般在初始化的信息不发生变化的情况下,克隆是最好的办法。这原创 2012-03-29 20:45:53 · 381 阅读 · 0 评论 -
设计模式之对反射的理解
1. 第二点是直接从度娘那里Copy过来的,看了几遍,云里雾里,我只能说这个机制描述的真的很高深。2. C#和Java是支持反射的,JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。Java反射机制主要提供了以下功能: 在运行时判断任意一原创 2012-06-12 16:02:58 · 849 阅读 · 0 评论 -
设计模式之抽象工厂模式
【定义】Abstract Factory,提供一个创建一系列相关或相互依赖对象的接口,而无需制定它们具体的类【场景】有一家生产螺丝螺帽的工厂,螺丝有两种型号:公的和母的,螺帽也有两种型号:公的和母的。没个车间只生产一种螺丝和螺帽。这里车间就是一个ConcreteFactory(具体工厂),螺丝和螺帽便是AbstractProduct(抽象产品),公螺丝&母螺丝&公螺帽&母螺帽都是Concr原创 2012-06-12 10:50:04 · 552 阅读 · 0 评论 -
设计模式之备忘录模式
【定义】备忘录(Memento),在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。【场景】备忘录模式,当然是在单机游戏里面用的多。比如角色扮演的《仙剑奇侠传》,在打Boss之前我们都会先保存当前进度,以便Boss没死,自己死了,好回到之前的存档点继续。【UML】【代码】#include using原创 2012-08-12 23:04:35 · 609 阅读 · 0 评论 -
设计模式总结
1、简单工厂、工厂方法、抽象工厂之比较:http://blog.csdn.net/humanbeng/article/details/71767512、原型模式(Prototype):用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。提供一个克隆方法即可。3、策略模式(Strategy):它定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化,不会影响原创 2013-02-26 21:04:47 · 566 阅读 · 0 评论