美文网首页
iOS 命令模式

iOS 命令模式

作者: LikeSomeBody | 来源:发表于2017-10-23 15:22 被阅读579次

    一:概念

    将请求封装成对象,以便使用不同的请求、日志、队列等来参数化其他对象。命令模式也支持撤销操作。

    二: 应用场景

    在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太合适。

    三:模式中角色

    3.1 抽象命令(Command):定义命令的接口,声明执行的方法。

    3.2 具体命令(ConcreteCommand):具体命令,实现要执行的方法,它通常是“虚”的实现;通常会有接收者,并调用接收者的功能来完成命令要执行的操作。

    3.3 接收者(Receiver):真正执行命令的对象。任何类都可能成为一个接收者,只要能实现命令要求实现的相应功能。

    3.4 调用者(Invoker):要求命令对象执行请求,通常会持有命令对象,可以持有很多的命令对象。这个是客户端真正触发命令并要求命令执行相应操作的地方,也就是说相当于使用命令对象的入口。

    3.5 客户端(Client):命令由客户端来创建,并设置命令的接收者。

    如下图所示:

    关系图

    就如同看电视,遥控器是命令管理者,遥控器按钮每次按下 都是创建一个命令 发给接收器。 每个电视都有一个一个接收器。接受器 和电视关联 并且可以对电视做部分的操作。

    四:代码演示

    DEMO 下载地址   使用 swift 语言编写。

    demo - UML 图

    对应关系如下:

    电视机  对应   viewController.view  ;   接收器 对应 receiver

    遥控器 对应  Invoker  负责 生成命令  rollBack 操作。

    每个 具体的命令 都是通过 执行  CommandProtocol 来处理。

    完整的调用看 DEMO  中的这里抽取 关键的代码

    1.0 Receiver

    receiver=Receiver();

    receiver?.clientView=self.view

    2.0 Invoker

    //

    varqueue:NSMutableArray=NSMutableArray()

    // swift 中单例的初始化方法 有点特别

    staticletsharedInstance:Invoker= {

    letsharedInstance =Invoker();

    returnsharedInstance;

    }()

    // commandProtocol 的情况

    publicfuncaddAndExecute(command:CommandProtocol){

    //

    self.queue.add(command)

    command.execute()

    }

    publicfuncrollBack(){

    ifself.queue.count>0{

    letcommand:CommandProtocol=self.queue.lastObjectas!CommandProtocol

    command.rollBackExecute()

    self.queue.removeLastObject()

    }

    }

    3.0   DarkerCommand

    classDarkerCommand:NSObject,CommandProtocol{

    weakvarreceiver:Receiver?

    varparamter:CGFloat?

    init(receiver:Receiver,paramter:CGFloat) {

    super.init();

    self.receiver= receiver;

    self.paramter= paramter;

    }

    funcexecute() {

    self.receiver?.makeDark(paramter:paramter!)

    }

    funcrollBackExecute() {

    self.receiver?.makeLighter(paramter:paramter!)

    }

    }

    相关文章

      网友评论

          本文标题:iOS 命令模式

          本文链接:https://www.haomeiwen.com/subject/oliiuxtx.html