设计模式6:命令模式
2018-05-22 11:04:13 7 举报
命令模式
作者其他创作
大纲/内容
1.ICommand为所有命令声明了一个接口。2.调用命令对象的execute()方法,就可以 让Receiver接收者进行相关的动作。3.这个接口也具备一个undo()方法。
命令模式本身:是模仿的现实世界。1.1个领导,可以将相同的命令发给不同的员工。2.1个领导,可以将不同的命令发给同一个员工。3.1个领导,可以将不同的命令发给不同的员工。4.2个领导,可以将相同的命令发给不同的员工。5.2个领导,可以将相同的命令发给相同的员工。6.2个领导,可以将不同的命令发给相同的员工。结论:“命令和员工多对多组合,执行”“命令发起者是多个”。“一切自由组合”
AReceiver
action()
1.请求者持有一个命令对象,1Command2.并在某个时间点调用命令对象1Command的execute()方法,3.1Command命令对象自动调用请求接收者AReceiver,将请求付诸实行。
这个2Command定义了动作(execute)和接收者((Receiver))之间的绑定关系。调用者只要调用execute()就可以发出请求,然后由ConcreteCommand调用接收者的一个或多个动作。
命令模式设计的理解:1.Invoker作为请求发起者,选择一个定义好的命令(多种:加减乘除、开始、停止、暂停、恢复),选择1个请求的接收者(接受者多种:黄种人、黑人、白人、巧克力人、红种人、中国人)。命令:做什么!具体的命令负责确定请求的接受者做什么。请求的接收者:谁来做!以及具体动作。2.command作为具体的命令,需要传递请求具体的接收者。3.receiver作为请求接收者,被具体command调用执行。(请求接收者可以看做实现者(具体是人、业务单元、方法都可以))例如:同样是加法、让黄种人和白种人执行,动作不同(黄种人心算、白种人找计算器),结果不同(黄种人可能算错了,白种人用计算器的算对了)。优点:通过接口,可以理解为,相同的请求:多种命令+多种请求接收者之间是多种组合拼装的。
Invoker
setCommand()
Client
public void execute(){ receiver.action()}
IReceiver
这个execute()方法会调用(Receiver)接收者的动作,执行动作,以满足请求者(Invoker)。
BReceiver
2Command
execute()undo()
1Command
ICommand
3.请求1Command
IReceiver为所有请求的接收者声明了一个接口。
1.实现AReceiver
2.装配AReceiver
请求的接收者action()进行必要的工作,实现这个请求。任何类都可以当接收者。
Client是负责组装。负责组装自己的命令和自己的接收者。(将接收者指定到命令上。)1.AReceiver(IReceiver接口的具体实现)2.1Command(Icomon接口的具体实现)将AReceiver 装配到 1Command 上。3.组装好了后封装为请求Invoker,请求只调用1Command命令。(接收者已经被命令指定了)
0 条评论
下一页