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

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

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. Java暗箱操作之enum

      enum,即枚举类型,在每种编程语言中都有类似的类型. 因为用得少,语法规则很难记得住,我每次看到enum都会感到害怕. 一般的enum语法是这样的: public class MyClass { p ...

    2. [AlwaysOn Availability Groups]SQL Server错误日志(AG)

      SQL Server错误日志(AG) SQL Server错误日志会记录影响AG的时间,比如: 1.和Windows故障转移集群交互 2.可用副本的状态 3.可用数据的状态 4.AG endpoint ...

    3. C++智能指针详解

      本文出自http://mxdxm.iteye.com/ 一.简介 由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete.程序员忘记 delete,流程太复杂,最 ...

    4. windows常用端口对应表

      端口概念 在网络技术中,端口(Port)大致有两种意思:一是物理意义上的端口,比如,ADSL Modem.集线器.交换机.路由器用于连接其他网络设备的接口,如RJ-45端口.SC端口等等.二是逻辑意义 ...

    5. plain framework 1(简约框架)一款主要用于网络(游戏)开发的C/C++框架 即将开源发布

      在我们的日常开发中,我们往往会遇到这种情况,当我们换了一个开发环境时很可能会重新利用一套新的框架进行开发.由于不同框架有着不同的接口,所以我们不得不花时间再次熟悉这些接口,这将造成开发时间上的重复,而 ...

    6. BZOJ 2243: [SDOI2011]染色 [树链剖分]

      2243: [SDOI2011]染色 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 6651  Solved: 2432[Submit][Status ...

    7. UVA计数方法练习[3]

      UVA - 11538 Chess Queen 题意:n*m放置两个互相攻击的后的方案数 分开讨论行 列 两条对角线 一个求和式 可以化简后计算 // // main.cpp // uva11538 ...

    8. Freemarker与Servlet

      1.导入jar包(freemarker.jar) 2.web.xml配置一个普通servlet <servlet> <servlet-name>hello</servle ...

    9. bzoj[3238][ahoi差异]

      Description Input 一行,一个字符串S Output 一行,一个整数,表示所求值 Sample Input cacao Sample Output HINT 2<=N<=5 ...

    10. 原生JS实现MVVM模式

      欢迎大家指导与讨论 : ) 前言 关于MVVM的原理大家可以参考这篇文章.<[翻译]Object.observe()带来的数据绑定变革 >http://www.tuicool.com/ar ...