美文网首页
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模式设计之--行为型: 9、命令模式(Command)

    iOS模式设计之--行为型: 9、命令模式(Command)

  • iOS 命令模式

    设计模式分类 创建型模式->5种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式 结构型模式->7种:...

  • iOS 命令模式

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

  • iOS 命令模式

    命令模式设定接受者,把操作抽象成对象,存储撤销操作。 应用,适用场景“行为请求者”、“行为实现者”,对行为进行记录...

  • 设计模式--命令模式(iOS)

    1、命令模式-定义 第一点:将一个请求封装成为一个对象,从而让用户使用不同的请求将客户端参数化第二点:对请求排队或...

  • iOS设计模式-命令模式

    什么是命令模式 命令模式(Command Pattern):将一个请求封装为一个对象,从而使我们可用不同的请求对客...

  • Flutter 状态管理实践

    原文链接 概述 iOS 和 Android 的原生开发模式是命令式编程模式。命令式编程要求开发者一步步描述整个构建...

  • iOS设计模式:命令

    视频教程-极客学院 ps:感觉打的一手好广告啊,因为自己不太爱看视频,但这类又必须看才能明白。粘贴源代码是为了以后...

  • iOS设计模式七(享元,代理,备忘录)

    承接上文iOS设计模式六(模板,策略,命令)本文为性能与对象访问-获取源码 目录1 享元模式2 代理模式2.1 N...

  • iOS设计模式六(模板,策略,命令)

    承接上文iOS设计模式五(访问者,装饰,责任链)本文为算法封装--获取源码 目录1 模板模式2 策略模式3 命令模...

网友评论

      本文标题:iOS 命令模式

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