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

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

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. C#:委托和自定义事件

      1. 委托概述 “委托”相当于C++中的“函数指针”,委托必须与所要“指向”的函数在“参数”和“返回类型”上保持一致; // 定义Person类 public class Person { publi ...

    2. Google在KDD2013上关于CTR的一篇论文

      最近在做CTR,刚好Google在KDD发了一篇文章,讲了他们的一些尝试,总结一下: 先是一些公式的符号说明: 一.优化算法 CTR中经常用Logistic regression进行训练,一个常用的L ...

    3. oracle in VS or效率

      select * from test where status in ('01', '02', '03', '111'); select * from test where status = '01' ...

    4. Spark官方文档 - 中文翻译

      Spark官方文档 - 中文翻译 Spark版本:1.6.0 转载请注明出处:http://www.cnblogs.com/BYRans/ 1 概述(Overview) 2 引入Spark(Linki ...

    5. spring quartz定时任务

      配置quartz 在spring中需要三个jar包: quartz-1.8.5.jar.commons-collections-3.2.1.jar.commons-logging-1.1.jar 首先 ...

    6. [django]利用xlwt实现文件下载功能

      代码: url.py: url(r'^importmould/$', 'keywork.views.xls_mould', name='xls_mould'), view.py: from djang ...

    7. JAVA中内部类和同文件非内部类的总结

      java文件的顶层类(即非其它类的内部类),可见范围只有public和非public(包内可见)2种,不能用private或protected修饰.1个Java文件只能有一个public类,且必须与文 ...

    8. GIF

    9. no-proxy 和proxy 的区别

      Child   <-   many-to-one   ->Parent         class   Child   {         private   Parent   paren ...

    10. docker创建镜像

      手动创建: docker run -d -p mynginx:v2 nginx rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest- ...