行为型模式优秀课件
{
if (income<Maxincome||myCompTax==null)
return income*Taxp-Disc;
else
return p(income);
}
}
职责链模式
效果:
降低了请求与响应的耦合性,职责链的顺序可 以由用户决定。
使用场合:
有多个对象可以处理一个请求,哪个对象处理 在运行时自动确定;
3.系统需要支持命令的撤消(undo)。命令对象可以 把状态存储起来,等到客户端需要撤销命令所产生 的效果时,可以调用undo()方法,把命令所产生的 效果撤销掉。命令对象还可以提供redo()方法,以 供客户端在需要时,再重新实施命令效果。
命令模式
意图
将一个请求封装为一个对象,从而可用不同的 请求对客户进行参数化。并对请求排队或者记 录请求日志,以及支持可撤销的操作。
将switch语句的分支包装为命令对象。
命令模式
意图
命令模式
实现结构
命令模式
实现结构说明:
Command:声明执行操作的接口; ConcreteCommand:绑定一个接受者对象到
3.通过使用Compmosite模式,可以将多个命 令封装为一个“复合命令”MacroCommand。
命令模式
效果及实现要点
4.Command模式与C#中的Delegate有些类 似。但两者定义行为接口的规范有所区别: Command以面向对象中的“接口-实现”来 定义行为接口规范,更严格,更符合抽象原则; Delegate以函数签名来定义行为接口规范, 更灵活,但抽象能力比较弱。
{
//加权限判断
c.Execute();
}
}
命令模式
效果及实现要点
1.Command模式的根本目的在于将“行为请 求者”与“行为实现者”解耦,在面向对象语 言中,常见的实现手段是“将行为抽象为对 象”。
2.实现Command接口的具体命令对象 ConcreteCommand有时候根据需要可能会 保存一些额外的状态信息。
职责链模式
意图:
将那些根据条件分别对某个事件请求进行处理 的对象连成一条链,并沿着这条链传递该请求, 直到有一个对象处理它为止,从而避免请求的 发送者和接受者之间的耦合关系。
职责链模式
实现类结构
职责链模式
实现类动态关系图
职责链模式
范例:计算所得税
职责链模式
范例:计算所得税
职责链模式
范例:计算所得税
2.需要在不同的时间指定请求、将请求排队。一个 命令对象和原先的请求发出者可以有不同的生命期。 换言之,原先的请求发出者可能已经不在了,而命 令对象本身仍然是活动的。这时命令的接收者可以 是在本地,也可以在网络的另外一个地址。命令对 象可以在串形化之后传送到另外一台机器上去。
命令模式
适用性
在下面的情况下应当考虑使用命令模式:
public class CompTax
{
public double Taxp;
public double Maxincome;
public double Disc;
public Comptax myCompTax;
public CompTax()
{
myCompTax = null; }
public double Comp(double income)
一般来看,composite模式和这种模式经常在 一起,Microsoft IE中的文档事件模型应该采 用的就是这样的模式。
职责链模式
动机:
在软件构建过程中,一个请求可能被多个对象 处理,但是每个请求在运行时只能有一个接收者, 如果显示指定,将必不可少地带来请求发送者和 接收者的深耦合.
条件嵌套
5.使用命令模式会导致某些系统有过多的具体 命令类。某些系统可能需要几十个,几百个甚 至几千个具体命令类,这会使命令模式在这样 的系统里变得不实际。
命令模式
适用性
在下面的情况下应当考虑使用命令模式:
1.使用命令模式作为"CallBack"在面向对象系统中 的替代。"CallBack"讲的便是先将一个函数登记上, 然后在以后调用此函数。
一个动作,并调用接受者的相应操作以实现 Execute; Client:创建一个具体命令对象并设定它的接受 者;
Invoker:要求该命令执行请求; Receiver:知道如何实施与执行一个请求相关
的操作,任何类都可能作为一个接受者。
命令模式
实现结构效果:
将调用操作的对象与知道如何实现该操作的对 象解耦;
Command可以像其他对象一样被操纵和扩展; 将多个命令装配为一个组合命令; 容易增加新命令。
命令模式
范例1:简单绘图程序
限制角色行为。由于行为(命令)被封装为命 令对象,因此可以使命令对象与角色的权限相 对应。在执行命令时判断是否符合权限,进而 实现对行为的安全控制。
命令模式
范例1:简单绘图程序
命令模式
范例1:简单绘图程序
命令模式
范例1:简单绘图程序
安全判断类的实现
Public class SecurityCommand:Command
{
ห้องสมุดไป่ตู้
private Command c;
public SecurityCommand(Command c)
{
this.c = c; }
public override void Execute()
行为型模式
行为型模式
构建型模式和结构型模式强调的都是静态 的类实体之间的关系,行为型模式着力解 决的是类实体之间的通讯关系。希望以面 向对象的方式描述一个控制流程。
职责链模式
概述:
这是个“请求”处理的模式。它提供一个思路, 来解决“请求”在一组具有一定结构的类之间 传递时的问题,因此它是一种将“请求”象链 条一样传导出去的方式。其具体传递方式,除 了和链的设计有关之外,最重要的是和对象组 的结构有关。
希望在不明确指定接受者的情况下,向多个对 象中的一个提交一个请求;
可以处理一个请求的对象集合应被动态指定。 例如:过滤器、事件处理器、异常处理器等。
命令模式
概述
在软件系统中,“行为请求者”与“行为实现 者”通常呈现一种“紧耦合”。但在某些场合, 比如要对行为进行“记录、撤销/重做、事务” 等处理,这种无法抵御变化的紧耦合是不合适 的。在这种情况下,如何将“行为请求者”与 “行为实现者”解耦?将一组行为抽象为对象, 可以实现二者之间的松耦合,这就是 Command模式。