美文网首页技术栈
iOS 命令模式

iOS 命令模式

作者: 宇宙高哥 | 来源:发表于2018-06-26 17:12 被阅读0次

设计模式分类

  • 创建型模式->5种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式
  • 结构型模式->7种:适配器模式、装饰模式、代理模式、外观模式、桥接模式、组合模式、享元模式
  • 行为型模式->11种:策略模式、模版方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式

这一片文章将讲述命令模式,其他模式会在后续的文章中更新

定义

命令模式(Command Pattern)

  • 第一点:将一个请求封装成一个对象,从未让用户使用不同的请求将客户端参数化
  • 第二点:对请求排队或者记录请求日志,以及支持撤销操作

应用场景

当需要将方法调用包装成一个对象,以延时方法调用,或者让其他组件在对其内部实现细节不了解的情况下调用的时候可以使用命令模式

  • 场景一:应用程序支持撤销和恢复
  • 场景二:记录请求日志,当系统故障这些命令可以重新被执行
  • 场景三:想用对象参数化一个动作以执行操作,并且用不同命令对象来替换回调函数

设计模式分析方法

  • 第一步:基本概念(了解)
  • 第二步:确定框架模式
  • 第三步:分析角色(每一种设计模式里面都会有角色划分),不同场景下角色不同,一个类担当角色达到3个之多,例如:一个User类(具体产品类、抽象产品类),在架构设计存在多种角色划分
  • 第四步:分析单个角色类结构(开源项目)
  • 第五步:分析单个角色意义(子类意义所在)
  • 第六步:分析模块
  • 第七步:性能优化问题

命令模式角色划分

  • 角色一:接收者->Receiver
  • 角色二:命令接口->CommandProtocol(协议)
  • 角色三:具体命令->ConcrateCommand
  • 角色四:请求者->Invoker

具体案例

俄罗斯方块
每一个操作都是一个命令,左命令、右命令、变形命令
角色划分:

  • 角色一:命令接口(抽象命令)->TMCommandProtocol
  • 角色二:具体命令 3个
    1、左命令-> TMLeftCommand
    2、右命令->TMRightCommand
    3、变形命令->TMTransformCommand
  • 角色三:接收者-> TetrisMachine
  • 角色四:请求者-> 命令管理器TetrisMachineManager

Demo地址
密码:mch1

相关文章

  • 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/alkpyftx.html