前言:

命令对象封装了如何对目标执行指令的信息,因此客户端或调用者不必了解目标的任何细节,却仍可以对他执行任何已有的操作。通过把请求封装成对象,客 户端可 以把它参数化并置入队列或日志中,也能够支持可撤销操作。命令对象将一个或多个动作绑定到特定的接收器。命令模式消除了作为对象的动作和执行它的接收器之 间的绑定。

正文内容大纲:

1、电视机、遥控器与接收器之间的关系
2、改变一个视图的明暗程度(未使用命令模式)
3、命令模式介绍
4、改变一个视图的明暗程度(使用命令模式)
5、附录


1.电视机、遥控器与接收器之间的关系

电视机没有遥控器当然也能够换台
如果要用遥控器,电视机上面肯定要有红外线接收器,专门用来接受遥控器的信息。
红外线接收器专门接受遥控器的信息,并转化成电视机里面的信息,让电视机识别。

    • 遥控器与接收器并非必要的设备
    • 接收器转换遥控器的信号
    • 电视机、遥控器与接收器之间的关系:电视机可以独立,不用遥控器和红外线接收器

2.改变一个视图的明暗程度的小实例项目(未使用命令模式)

首先在ViewController添加三个按钮,并设置好相关属性和监听点击事件:

然后创建任务执行者对象Receiver类,创建的实例对象负责执行调整View背景明亮暗度

因为在非命令模式下,撤销逻辑不好实现,这里就不提供实现了

最后展示效果:

其实到这里,Receive对象相当于ViewController的代理,代理完成控制属于Viewcontroller管理和控制的View 的背景明亮暗度调整。只不过这个代理不是那么抽象而且也不是遵循了某个协议的。是具体而直接完成逻辑业务的。这个简单的模式,在项目或者不考虑拓展性或者 某个模块功能固定了,可以使用这个模式。

但是有的业务需求会需要记录存储和取出执行任务的或者信息传递命令的状态,像这里如果要添加撤销操作,就需要记录之前的操作,然后根据之前的操作回 退反过来操作,这时候,命令模式就能比较方便的实现这个逻辑了。命令模式其实就是将发送的命令信息抽象成一个类,然后具体信息就创建具体的类,并通过回调 者添加并执行命令对象的执行命令涉及到的任务方法,同时存储记录这个命令,那么这时候因为每次操作都能存储下来,所以再来设计撤销操作就很容易了。这就是 命令模式的一个优点。

3.命令模式介绍

命令模式的UML图:

概述

在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,
这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将“行为请求者”与“行为实现者”解耦?将一组行为抽象为对象,实现二者之间
的松耦合。这就是命令模式(Command Pattern)。

4.改变一个视图的明暗程度(使用命令模式)

分析之前的代码:

为了能够行为进行“记录、撤销/重做、事务”等处理,我们可以使用命令模式:

  • 设定接受者
  • 将改变明暗的操作抽象成对象
  • 撤销操作

分析:

最后命令的发起者和命令的执行者是解耦的。

提供更完整的代码链接: http://pan.baidu.com/s/1sjOlm8l 密码: me5f

5、附录

IOS命令模式的学习网站:http://www.cnblogs.com/YouXianMing/p/4888402.html

 大神项目源码编程细节学习积累,所谓编程经验就是在实际代码应用中,代码的用法,代码的风格,代码表述逻辑的方式,分析和积累真正的有几年开发经验的大神写的代码,可以让你更快的提高编程经验值:
 
使用枚举设置控件的Tag值:
 
 画控件的边框属性:
 
 命令模式的代码细节:
 
用内置的函数设置MIN和MAX的边界,个人觉得在这里是多余的,不过这两个函数的用法可以积累下来,用于其他需要的时候使用。
 
 学习的编程细节方面的技巧:
 
 空引用和空方法:
 
 
 
 
 
 
 
 
 
 
 
 
 
 

iOS设计模式 - 命令模式的更多相关文章

  1. iOS设计模式 - 命令

    iOS设计模式 - 命令 原理图 说明 命令对象封装了如何对目标执行指令的信息,因此客户端或调用者不必了解目标的任何细节,却仍可以对他执行任何已有的操作.通过把请求封装成对象,客户端可以把它参数化并置 ...

  2. linkin大话设计模式--命令模式

    linkin大话设计模式--命令模式 首先考虑一种应用情况,某个方法需要完成某一个功能,这个功能的大部分功能已经确定了,但是有可能少量的步骤没法确定,必须等到执行这个方法才可以确定. 也就是说,我们写 ...

  3. 【设计模式】Java设计模式 - 命令模式

    Java设计模式 - 命令模式 生命不息,写作不止 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! 目录 Ja ...

  4. [Head First设计模式]餐馆中的设计模式——命令模式

    系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式— ...

  5. JAVA 设计模式 命令模式

    用途 命令模式 (Command) 将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化:对请求排队或请求日志,以及支持可撤销的操作. 命令模式是一种行为型模式. 结构

  6. 深入浅出设计模式——命令模式(Command Pattern)

    模式动机 在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来进行设计,使得请 ...

  7. Java设计模式-命令模式(Command)

    命令模式很好理解,举个例子,司令员下令让士兵去干件事情,从整个事情的角度来考虑,司令员的作用是,发出口令,口令经过传递,传到了士兵耳朵里,士兵去执行.这个过程好在,三者相互解耦,任何一方都不用去依赖其 ...

  8. 设计模式--命令模式(Command)

    基本概念:  Command模式也叫命令模式 ,是行为设计模式的一种.Command模式通过被称为Command的类封装了对目标对象的调用行为以及调用参数,命令模式将方法调用给封装起来了. 命令模式的 ...

  9. javascript设计模式——命令模式

    前面的话 假设有一个快餐店,而我是该餐厅的点餐服务员,那么我一天的工作应该是这样的:当某位客人点餐或者打来订餐电话后,我会把他的需求都写在清单上,然后交给厨房,客人不用关心是哪些厨师帮他炒菜.餐厅还可 ...

随机推荐

  1. DDD:一个朋友对领域驱动的小结

    首先我在一家老板有点关系的小软件公司带领一帮工作一两年的程序员做项目,这里要特别强调的是做项目(差不多是外包,只不过客户群体比较固定),项目就是今天项目A是这个逻辑,明天项目B是那个逻辑,两者之间的业 ...

  2. [Node.js] BDD和Mocha框架

    原文地址:http://www.moye.me/2014/11/22/bdd_mocha/ 引子 今天造了个轮子:写了个深拷贝任意JavaScript对象的模块(事实上npm上已经有类似的模块,纯造轮 ...

  3. iOS-UITextField-通知

    二.处理文本框与键盘之间的关系(当键盘弹出遮挡到文本框的时候进行调整) 原理: 首先要明白: 1,键盘隐藏的时候,键盘上边界紧贴屏幕最低端,键盘在屏幕正下方. 2:键盘弹起的时候,键盘下边界跟屏幕下边 ...

  4. js中offsetLeft,offsetTop,offsetParent计算边距方法

    封装一个函数获得任一元素在页面的位置 var GetPosition= function (obj) { var left = 0; var top = 0; while(obj.offsetPare ...

  5. 参数嗅探(Parameter Sniffing)(1/2)

    这个问题会在参数话的SQL语句(例如存储过程)与SQL Server里的计划缓存机制结合的时候会出现.这个文章分为2个部分,第1部分会介绍下参数嗅探(Parameter Sniffing)的概况,第2 ...

  6. [Latex]实现行内高亮

    Latex的行内高亮 前两天想要在做的小操作系统实验指导书里使用行内高亮,一开始虽然有命令 \mint{Language}|contents| 但是无奈只能实现跳行高亮,即不能实现行内高亮.即代码高亮 ...

  7. Scrum项目1.0

    1) N (Need 需求) 面向小学生 2) A (Approach 做法) 3) B (Benefit  好处) 让小学生以游戏的方式进行学习 4) C (Competitors 竞争) 减少练习 ...

  8. Scrum 项目 7.0 Sprint回顾

    7.0------------------------------------------------ Sprint回顾 让我们一次比一次做得更好.   1.回顾组织 主题:“我们怎样才能在下个spr ...

  9. 2015 Multi-University Training Contest 1 - 1002 Assignment

    Assignment Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=5289 Mean: 给你一个数列和一个k,求连续区间的极值之 ...

  10. 从P6 EPPM 8 R3 到P6 EPPM 16 R1 有哪些改变?

    Product 特征 First Release for Feature P6 EPPM 通过编辑活动标识替换关系.当你需要修改一个关系,你不需要删除现有的关系,并作出一个新的,你可以简单地编辑活动的 ...