命令模式
一.命令模式-定义?
命令模式(Command Pattern)
第一点:将一个请求封装成为一个对象,从而让用户使用不同的请求将客户端参数化
第二点: 对请求排队或者纪录请求日志,以及支持撤销操作.
说白了: 让我们程序扩展性更加好了,耦合降低.
二.命令模式-应用场景?
当需要将方法调用包装成一个对象,以延时方法调用,或者让其他组件在对其内部实现细节不了解的情况下进行调用的时候可以使用命令模式.
场景一: 应用程序支持撤销和恢复
场景二: 记录请求日志,当系统故障这些命令可以重新被执行.
场景三: 想用对象参数化一个动作以执行操作,并且用不同的命令对象替换回调函数.
三.学习方法:分析命令模式
第一步:基本概念(了解)
第二步:确定框架模式
第三步:分析角色(每一种设计模式里面都会有角色划分)不同场景下角色不同,一个类担当角色达到3个之多
例如:一个User类(具体产品类、抽象产品类),在架构设计存
第四步:分析单个角色类结构(开源项目)
第五步:分析单个角色意义(子类意义所在)
第六步:分析模块
第七步:性能优化问题
3.1分析命令模式角色划分?->案例分析
4个角色?->自己写框架,看框架,每一个类是什么角色?
角色一 : 接收者
角色二 : 命令接口
角色三 : 具体命令
角色四 : 请求者
3.2 命令模式->原理案例
搭建这几个角色(类结构搭建出来)
命令模式规范
1.角色一:接收者->Reciever
->创建命令行项目:new->project->maxOS->CommandLine Tool.创建项目
->创建CocoaClass类,命名为Reciever

2.角色二:命令接口->CommandProtocol(协议)
->创建Header File.h文件,命名为CommandProtocol.h

3.角色三:具体命令->ConcrateCommand
->创建CocoaClass类,命名为ConcrateCommand


4.角色四:请求者->Invoker
->创建CocoaClass类,命名为Invoker

3.3 命令模式->具体案例
每一个角色之间关系和调用
案例:电脑关机和开机?
层层递进
角色和角色,顺序可以颠倒
确定角色?
关联角色?
首先:关联请求者
其次:实现接收者
最后:实现命令角色
1、命令接口->ComputerCommandProtocol

2、具体命令->实现类
两个:开机命令、关机命令
开机:MacStartupCommand(遵循我们的协议->接口->标准)
关机:MacShutdownCommand (遵循我们的协议->接口->标准)


3、接收者->电脑->MacComputer


4、请求者->Invoker
面向协议编程->将所有的功能抽象为协议


网友评论