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

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

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. 在数组中找出x+y+z=0的组合

      就是找x+y=-z的组合 转化为找出值为-z满足x+y=-z的组合 解法一: 为了查找,首先想到排序,为了后面的二分,nlogn, 然后x+y的组合得n^2的复杂度,加上查找是否为-z,复杂度为nlo ...

    2. ORACLE OLAP错误ORA-06512: at "SYS.OLAPIHISTORYRETENTION"

      刚刚安装了ORACLE 10g R2后,启动数据库时发现告警日志有如下错误: Database Characterset is UTF8 replication_dependency_tracking ...

    3. java 单例(懒汉式)

      该示例考虑了懒汉式单例的线程安全问题

    4. SQL Server 2008 R2——使用FULL OUTER JOIN实现多表信息汇总

      =================================版权声明================================= 版权声明:原创文章 谢绝转载  请通过右侧公告中的“联系邮 ...

    5. hibernate基础dao类

      此文章是基于 搭建SpringMVC+Spring+Hibernate平台 功能:数据库的保存.更新.删除:sql.hql查询:分页查询:调用存储过程 创建hibernate基础dao类: BaseD ...

    6. Linux下TomcatVM参数修改:Native memory allocation (mmap) failed to map 3221225472 bytes for committing reserved memory.

      不可行的方法最初我直接修改catalina.sh, 将JAVA_OPTS变量加上了 -server -Xms1G -Xmx1G -XX:+UserG1GC最初看起来没啥问题,但是当服务器运行几天后,发 ...

    7. gpuimage的各种滤镜简介

      #import"GLProgram.h" //Baseclasses #import"GPUImageOpenGLESContext.h" #import&qu ...

    8. 帆软报表FineReport SQLServer数据库连接失败常见解决方案

      1. 问题描述 帆软报表FineReport客户端连接SQLServer(2000.2005等),常常会出现如下错误:com.microsoft.sqlserver.jdbc.SQLServerExc ...

    9. POJ 1325 Machine Schedule——S.B.S.

      Machine Schedule Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 13731   Accepted: 5873 ...

    10. Hibernate 延迟加载和立即加载

      概念 什么是延迟加载:所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作.可以简单理解为,只有在使用的时候,才会发出sql语句进行查询,数据是分N次读取. 什么是立即加载:所谓立即加载既是 ...