做了一个项目,项目中一个藏品详情界面针对不同用户,和用户所处于的状态的不同,展示的效果和操作的权限都会不同。想到了状态模式,从来没有用过,赶紧学一下然后用一用。期待兴奋

看了这么多的博客,终于找到一个可以分享的博客啦,这里

1.事必有因

我有一个视图层,在这个视图层上展示的效果和操作行为是一个或多个动态变化的属性来决定的,这些属性被称为状态

保利藏品库房管理软件中藏品信息展示界面

1.人员分类 :仓库管理员、藏品录入业务员
2.操作状态:观看状态、编辑状态

  • 业务员录入藏品状态 —— 可以修改藏品信息,但是不会显示藏品录入时间和业务员信息
  • 业务员观看藏品状态 —— 不能修改藏品信息
  • 业务员编辑藏品状态 —— 可以修改藏品信息,但是不能修改藏品录入时间和业务员信息
  • 管理员观看藏品状态 —— 不能修改藏品信息
  • 管理员编辑藏品状态 —— 不能修改藏品信息,只能修改藏品所在仓库的位置

2.方案分析

状态模式:允许一个对象在自己内部根据状态改变时来改变自己的行为(展示、权限等)。这个对象开起来似乎修改了自己的类。并且这个对象被叫做有状态的对象,这样的对象状态值是实现定义好的一系列值中取出来的。当一个状态值被对象外部的事件产生改变的时候,状态值就会影响对象内部的行为的改变。

3.使用场景上

  • 出现当量if else场景,想上述的那个需求来说,可想而知用ifelse判断多恐怖

    iOS - 在工程中试玩状态模式的更多相关文章

    1. iOS开发-状态模式

      状态模式允许对象内部状态改变时改变它的行为,对象看起来好像修改了它的类.状态模式看起来和策略模式比较相像,策略模式是将可以互换的行为封装起来,然后通过使用委托的方式,决定使用哪一个行为,状态也是封装行 ...

    2. 轻松掌握:JavaScript状态模式

      状态模式 状态模式(State)允许一个对象在其内部状态改变的时候改变它的行为,对象看起来似乎修改了它的类. 状态模式的使用场景也特别明确,有如下两点: 一个对象的行为取决于它的状态,并且它必须在运行 ...

    3. (二十一)状态模式详解(DOTA版)

      作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 本次LZ给各位介绍状态模式, ...

    4. c++ 状态模式(state)

      /************************************************************************/ /* 状态模式 */ /************* ...

    5. Javascript设计模式之我见:状态模式

      大家好!本文介绍状态模式及其在Javascript中的应用. 模式介绍 定义 当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类. 状态模式主要解决的是控制一个对象状态的条件表达式 ...

    6. State Pattern -- 状态模式原理及实现(C++)

      主要参考<大话设计模式>和<设计模式:可复用面向对象软件的基础>两本书.本文介绍命令模式的实现. 问题出发点 在实际开发中,我们经常会遇到这种情况:一个对象有多种状态,在每一个 ...

    7. 【转】设计模式 ( 十七) 状态模式State(对象行为型)

      设计模式 ( 十七) 状态模式State(对象行为型) 1.概述 在软件开发过程中,应用程序可能会根据不同的情况作出不同的处理.最直接的解决方案是将这些所有可能发生的情况全都考虑到.然后使用if... ...

    8. 24种设计模式--状态模式【State Pattern】

      现在城市发展很快,百万级人口的城市一堆一堆的,那其中有两个东西的发明在城市的发展中起到非常重要的作用:一个是汽车,一个呢是...,猜猜看,是什么?是电梯!汽车让城市可以横向扩展,电梯让城市可以纵向延伸 ...

    9. IOS的工程目录结构和生命周期

      IOS的工程目录结构和生命周期 ·simple table文件夹:工程相关源代码和配置文件 BIDAppDelegate :    委托的声明和实现 BIDViewController:    视图控 ...

    随机推荐

    1. Linux iptables配置错误导致ORA-12535 & ORA-12170

      实验环境:       操作系统  : Red Hat Enterprise Linux Server release 5.7 (Tikanga)       数据库版本: Oracle Databa ...

    2. SQL SERVER导出特殊格式的平面文件

      有时候我们需要将SQL SERVER的数据一次性导入到ORACLE中,对于数据量大的表.我一般习惯先从SQL SERVER导出特殊格式的平面文件(CSV或TXT),然后用SQL*Loader装载数据到 ...

    3. MS SQL 错误:无法绑定由多个部分组成的标识符 "xxxxx"

      今天有个同事问我一个SQL问题,觉得有点意思,虽然能很快定位并解决问题,但是就是有种说不清道不明的感觉.因为不能解释清楚(很多是建立在假设上),顺便记录一下,希望有清楚原理的人能解答一二. 原SQL语 ...

    4. CentOS使用yum源中自带的rpm包安装LAMP环境

      CentOS使用yum源中自带的rpm包安装LAMP环境.这是Linux下安装LAMP的环境一种最基本最简便的方式.新手可以从容安装使用. 1. 安装基础包(可选安装)yum install -y w ...

    5. netty3升netty4一失眼成千古恨

      老项目是netty3的,本来想直接改到netty5,但是netty5居然是只支持jdk1.7,很奇怪jdk1.6和jdk1.8都不行..为了兼容jdk1.6加上netty4本来和netty5就差别不大 ...

    6. [WPF系列]-DynamicResource与StaticResource的区别

      探讨: 1.当引用资源时,选择StaticResource还是DynamicResource的考虑因素: (1)在哪里创建资源?(资源的范围或层级) a. 资源是在一个Page/Canvas/Wind ...

    7. Neutron 理解 (6): Neutron 是怎么实现虚拟三层网络的 [How Neutron implements virtual L3 network]

      学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GR ...

    8. Microsoft Azure Point to Site VPN替代方案

      Microsoft Azure提供了Point to Site VPN,但有时候这并不能满足我们的需求,例如:Point to Site VPN是SSTP VPN,只能支持Window客户端拨入,而且 ...

    9. 模-数(A/D)转换器

      一.A/D转换的基本原理 在一系列选定的瞬间对模拟信号进行取样,然后再将这些取样值转换成输出的数字量,并按一定的编码形式给出转换结果. 整个A/D转换过程大致可分为取样.量化.编码三个过程.二.取样- ...

    10. iOS第八课——Navigation Controller和Tab bar Controller

      今天我们要学习Navigation Controller和Tab bar Controller. Navigation Controller是iOS编程中比较常用的一种容器,用来管理多个视图控制器. ...