摘要: 对于职责链模式,一般是这么定义的:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,即——将这些对象连成一条(处理)链,并沿着这条链传递该请求,直到这条链结束同时有一个对象处理它为止。最经典的职责链模式应用就是JavaEE规范中web.xml的filter了,filters按照配置的顺序,依次处理根据其mapping条件过滤得到的web请求(response)/应答(request),从而可以实现诸如编码转换、事务封装、页面缓存等众多“职责”。给出职责链模式的适用范围:1、有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定。2、想在不明确指定接收者的情况下, 阅读全文
posted @ 2012-03-26 22:18 笑笑小白 阅读(236) 评论(0) 推荐(0)
摘要: 责任链模式是一种对象的行为模式【GOF95】。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递, 直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新 组织链和分配责任。从击鼓传花谈起击鼓传花是一种热闹而又紧张的饮酒游戏。在酒宴上宾客依次坐定位置,由一人击鼓,击鼓的地方与传花的地方是分开的,以示公正。开始击鼓时,花束就开始依次传递,鼓声一落,如果花束在某人手中,则该人就得饮酒。击鼓传花便是责任链模式的应用。责任链可能是一条直线、一个环链或者一个树结构的一部分。二 阅读全文
posted @ 2012-03-26 22:06 笑笑小白 阅读(300) 评论(0) 推荐(0)
摘要: 本文以项目中的一个工作流模块,演示责任链模式、策略模式、命令模式的组合实现!流程简介最近在做的一个项目,涉及到的是一个流程性质的需求。关于工程机械行业的服务流程:服务任务流程和备件发运流程。项目之初,需求不是很清晰,算是演化模型吧。先出一个简单版本,然后根据用户的使用情况,再进一步探测新需求。所以也就是说这两个流程中的每一步暂时都不是固定的,而应该是可配置、可增减的。目前暂定的两个流程示意图如下:以上为两个流程的大致过程,当然实际过程中,可能还要走其他的流程。但是,仔细分析,你会看到。不管有多少个中间步骤,它们始终都对应着它们在该流程中所处的状态:/// <summary>/// 阅读全文
posted @ 2012-03-26 21:48 笑笑小白 阅读(2950) 评论(2) 推荐(0)
摘要: 【51CTO独家特稿】在上期的《PHP设计模式漫谈》中,我们讲到了PHP的代理模式,本节我们将继续深入PHP设计模式,讲解的行为模式是责任链模式,其目的是组织一个对象链处理一个如方法调用的请求。当ConcreteHandler(具体的处理程序)不知道如何满足来自Client的请求时,或它的目的不是这个时,它会委派给链中的下一个Handler(处理程序)来处理。这个设计模式通常和复合模式一起使用,其中有些叶子或容器对象默认委派操作给它们的父对象。另一个例子是,本地化通常是使用责任链处理的,当德语翻译适配器没有为翻译关键词找到合适的结果时,就返回到英语适配器或干脆直接显示关键词本身。耦合减少到最低 阅读全文
posted @ 2012-03-26 20:33 笑笑小白 阅读(357) 评论(0) 推荐(0)
摘要: 中介者模式(Mediator)定义一个对象封装一系列多个对象如何相互作用,使得对象间不需要显式地相互引用,从而使其耦合更加松散,并且还让我们可以独立变化多个对象相互作用。结构图如下:以一个聊天室的例子进行说明,一个聊天室可以很多成员,成员可以加入不同的讨论组,聊天室就是一个中介,讨论组中的成员通过聊天室发送消息。结构图如下:实现代码://IChatroom.hclassUser;classIChatroom{public:IChatroom();virtual~IChatroom();virtualvoidRegister(User*)=0;virtualvoidSend(char*pFrom 阅读全文
posted @ 2012-03-26 18:04 笑笑小白 阅读(276) 评论(0) 推荐(0)
摘要: 组合模式(Composite)的定义为:组合多个对象形成树形结构,以表示整体-部分的结构层次。组合模式对单个对象和组合对象的使用具有一致性。其结构图如下:例如一个新闻的树形菜单,它包含很多原始菜单(如国内、国际),以及由其子菜单组成的组合节点(如国内新闻下的时事、社会等),结构图如下:实现代码://Menu.h#include<string>classMenu{public:virtual~Menu();virtualvoidAdd(Menu*);virtualvoidRemove(Menu*);virtualMenu*GetChild(int);virtualvoidDispla 阅读全文
posted @ 2012-03-26 18:03 笑笑小白 阅读(315) 评论(0) 推荐(0)
摘要: 状态模式(State)允许一个对象在其内部状态改变的时候改变行为。结构图为:汽车有不同的档速,当行车时,经常需要换档,换档是从低到高,换档的过程就是状态的改变过程。实现代码://Car.hclassState;classCar{public:Car(State*);virtual~Car();voidSetState(State*);voidPull();private:State*m_pState;};#include"stdafx.h"#include"Car.h"#include"State.h"#include<iost 阅读全文
posted @ 2012-03-26 18:02 笑笑小白 阅读(254) 评论(0) 推荐(0)
摘要: 命令模式(Command)的目标是将一个请求封装成一个对象,因此可以参数化多个客户的不同请求,将请求排除,记录请求日志,并支持撤消操作。 结构图如下:其实现思想是将一个请求封装到一个类中(Command),再提供接收对象(Receiver),最后Command命令由Invoker调用。以一个电灯开关为例,命令的执行、不执行相对于开关的打开、关闭操作,由开关发出命令,电灯接收命令,结构图如下:实现代码://Light.hclassLight{public:Light();virtual~Light();voidTurnOn();voidTurnOff();};//Light.cpp#includ 阅读全文
posted @ 2012-03-26 18:01 笑笑小白 阅读(255) 评论(0) 推荐(0)
摘要: 责任链模式(Chain of Responsibility)的目标是使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。结构图为:用一个采购的例子来说明,采购人员在进行采购前需经过上级部门的批准,对于不同金额的采购分别要由不同级别的上级才能审批,假设1万以内的采购需要主管批准,10万以内的需要主管向总经理申请批准,超过10万总经理向需董事长宴请批准,这时对于采购的审批过程就形成了一条责任链,对于不同的采购请求就需要一级一级的向上传递,并最终传递到最上级然后自行处理。结构图如下:实现代码://Process 阅读全文
posted @ 2012-03-26 18:00 笑笑小白 阅读(590) 评论(0) 推荐(0)
摘要: 0 引言0.1 设计模式解析(总序)0.2 设计模式解析后记0.3 与作者联系1 创建型模式1.1 Factory模式1)为了提高内聚(Cohesion)和松耦合(Coupling) ,我们经常会抽象出一些类的公共接口以形成抽象基类或者接口。 这样我们可以通过声明一个指向基类的指针来指向实际的子类实现,达到了多态的目的。这里很容易出现的一个问题 n 多的子类继承自抽象基类,我们不得不在每次要用到子类的地方就编写诸如 new ×××;的代码。这里带来两个问题 1)客户程序员必须知道实际子类的名称(当系统复杂后,命名将是一个很不好处理的问题,为了处理可能的名字冲突,有 阅读全文
posted @ 2012-03-26 17:23 笑笑小白 阅读(983) 评论(0) 推荐(0)