随笔分类 -  Design Patterns

1
摘要:1、简单工厂、工厂方法、抽象工厂之比较:http://blog.csdn.net/humanbeng/article/details/71767512、原型模式(Prototype):用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。提供一个克隆方法即可。3、策略模式(Strategy... 阅读全文
posted @ 2013-02-26 21:04 $逝水无痕$ 阅读(90) 评论(0) 推荐(0)
摘要:【原文地址】http://blog.csdn.net/hityct1/article/details/4164393访问者模式(Visitor Pattern)的c++实现示例访问者模式是一种分离对象数据结构与行为的方法,通过这种分离,可以为一个已存在的类或类群(即被访问者)增加新的操作(即访问者)... 阅读全文
posted @ 2012-08-29 22:39 $逝水无痕$ 阅读(122) 评论(0) 推荐(0)
摘要:【原文转自】http://blog.csdn.net/freshow/article/details/5772307解释器模式(interpreter),给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。解释器模式需要解决的是,如果一种特定类型的问题发生... 阅读全文
posted @ 2012-08-29 22:25 $逝水无痕$ 阅读(222) 评论(0) 推荐(0)
摘要:【定义】享元模式(Flyweight),运用共享技术有效的支持大量细粒度的对象。【场景】依旧以手机为例,手机有很多属性,品牌,手机号码,手机颜色等,现在假设手机有品牌和手机号码两种属性。手机品牌有Iphone,Sumsung,Nokia三种,但是手机号码却有千千万万,这千千万万的手机号码便是大量的细... 阅读全文
posted @ 2012-08-26 23:49 $逝水无痕$ 阅读(126) 评论(0) 推荐(0)
摘要:【定义】中介者模式(Mediator),用一个中介对象来封装一系列的对象交互。中介者使各个对象不需要显示地相互应用,从而使其耦合松散,而且可以独立的改变它们之间的交互。【场景】一个窗口中有两个控件,一个按钮Button和编辑框Label,现在要单机按钮则编辑框改变文本,如果将编辑框改变文本的代码放到... 阅读全文
posted @ 2012-08-26 19:17 $逝水无痕$ 阅读(141) 评论(0) 推荐(0)
摘要:【定义】职责链模式(Chain of Responsibility),使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的偶合关系。将这个对象练成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。【UML】【代码】#include using namespace std;class... 阅读全文
posted @ 2012-08-26 16:28 $逝水无痕$ 阅读(101) 评论(0) 推荐(0)
摘要:【定义】命令模式(Command),将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。【场景】这里以向窗口发送消息和窗口处理消息为例(有些牵强,UI窗口的消息管理其实可以用这个设计模式模拟实现,将Invoker改成MessageMana... 阅读全文
posted @ 2012-08-26 15:24 $逝水无痕$ 阅读(116) 评论(0) 推荐(0)
摘要:【定义】桥接模式(Bridge),将抽象部分与它的实现部分分离,使他们都可以独立地变化。【场景】继承实际上是一种非常紧密的依赖关系,也即父类实现中的任何变化都将会导致子类发生变化。以手机为例,手机包括品牌和操作系统,假设现在手机品牌分三种:三星,苹果,诺基亚,而手机软件按系统来分也有两种:安卓,IO... 阅读全文
posted @ 2012-08-22 23:15 $逝水无痕$ 阅读(117) 评论(0) 推荐(0)
摘要:【定义】单例模式(SingleTon),保证一个类仅有一个实例,并提供一个访问它的全局访问点。【场景】很多exe文件都只允许运行一次,即当你第一个exe打开未关闭之前,再第二次打开,会提示说“已经有一个exe程序在运行了”,如果将这个exe文件看成一个类,则它就是一个单例。【UML】【代码】//下面... 阅读全文
posted @ 2012-08-21 23:20 $逝水无痕$ 阅读(95) 评论(0) 推荐(0)
摘要:【定义】迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。【场景】下面是一个Int型的数组,这里实现一个遍历该数组的迭代器。如果又有一个新的数组,而数组里面的数据是class Car,则实现一个class CarArray即可,迭代器类是基于模... 阅读全文
posted @ 2012-08-21 21:49 $逝水无痕$ 阅读(172) 评论(0) 推荐(0)
摘要:【定义】组合模式(Composite),将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。【场景】现在我们自己实现几个简单的基本控件(如按钮Button、文本编辑框Label)等;而实际上窗口也算上一个控件,只是窗口可以有子窗口,但最终窗口还是... 阅读全文
posted @ 2012-08-15 21:24 $逝水无痕$ 阅读(130) 评论(0) 推荐(0)
摘要:【定义】备忘录(Memento),在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。【场景】备忘录模式,当然是在单机游戏里面用的多。比如角色扮演的《仙剑奇侠传》,在打Boss之前我们都会先保存当前进度,以便Boss没死,自己死了,好... 阅读全文
posted @ 2012-08-12 23:04 $逝水无痕$ 阅读(102) 评论(0) 推荐(0)
摘要:【定义】Adapter,将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。【场景】姚明在NBA打球,他和火箭的其他队友打得都是篮球,但首先姚明英文很差,为了让他和其他球员有效的沟通,这时可以为他实现一个语言的适配器,也就是请一个翻... 阅读全文
posted @ 2012-08-01 00:02 $逝水无痕$ 阅读(91) 评论(0) 推荐(0)
摘要:1. 第二点是直接从度娘那里Copy过来的,看了几遍,云里雾里,我只能说这个机制描述的真的很高深。2. C#和Java是支持反射的,JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象... 阅读全文
posted @ 2012-06-12 16:02 $逝水无痕$ 阅读(726) 评论(0) 推荐(0)
摘要:【定义】Abstract Factory,提供一个创建一系列相关或相互依赖对象的接口,而无需制定它们具体的类【场景】有一家生产螺丝螺帽的工厂,螺丝有两种型号:公的和母的,螺帽也有两种型号:公的和母的。没个车间只生产一种螺丝和螺帽。这里车间就是一个ConcreteFactory(具体工厂),螺丝和螺帽... 阅读全文
posted @ 2012-06-12 10:50 $逝水无痕$ 阅读(189) 评论(0) 推荐(0)
摘要:【定义-Intent】Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automati... 阅读全文
posted @ 2012-06-11 16:13 $逝水无痕$ 阅读(127) 评论(0) 推荐(0)
摘要:【定义】建造者模式(Builder),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。【场景】一个简单的XML解析器,XML解析可以分两部分,第一部分:开始标签,结束标签,属性等,这部分对于所有的XML文件处理都是一样的,因为每个XML都由开始标签,结束标签等构成;第二部分... 阅读全文
posted @ 2012-06-11 10:57 $逝水无痕$ 阅读(160) 评论(0) 推荐(0)
摘要:【定义】定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模版方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。【场景】模版方法模式是通过把不变行为搬移到超类,去除子类中的重复代码来体现她的优势。当不变的和可变的行为在方法的子类实现中混合在一起的时候,不变的行为在子类中重复出现... 阅读全文
posted @ 2012-06-07 16:43 $逝水无痕$ 阅读(134) 评论(0) 推荐(0)
摘要:【定义】用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。【情景】假设现在在一家公司应聘,对方要求填写求职信息表,多位面试官每人都要一份,需要手工填写。现在有两种方式可供选择:a、手工填写多份信息表; 2、手工填写一份,然后剩下的拿填写完得第一份复印。第二种方式就是这里所说的原型模式... 阅读全文
posted @ 2012-03-29 20:45 $逝水无痕$ 阅读(117) 评论(0) 推荐(0)
摘要:一、单一职责原则(SRP)就一个类而言,应该仅有一个引起它变化的原因。二、开放-封闭原则(OCP)软件实体(类、模块、函数等)应该可以扩展,但是不可以修改。也即对于扩展是开放的(Open for extension),对于更改是封闭的(Closed for modification)。面对需求,对程... 阅读全文
posted @ 2012-02-14 18:08 $逝水无痕$ 阅读(104) 评论(0) 推荐(0)

1