iOS - 在工程中试玩状态模式

本文详细介绍了如何在藏品库房管理软件中运用状态模式,通过人员分类和操作状态来实现视图层效果和操作行为的变化。文章深入分析了状态模式的原理、使用场景和与策略模式的区别,并通过实例展示了如何解决多条件判断问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

1.事必有因

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

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

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

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

2.方案分析

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

3.使用场景上

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

4.结构图

摘自文中开头分享的博客中,大多数状态模式UML都是这个,嘿嘿,原理都是这样的。
797099-20160419172316054-1321485310.jpg

Context 环境类: 定义客户感兴趣的接口,维护一个具体状态的子类的实例,这个实例定义当前状态。
State 抽象状态类:定义一个封装好与Context的特定状态相关的行为接口。
ConcreteStates 具体状态类:每一个具体的状态类实现了一个与Context的一个状态相关的行为。

5.状态模式和策略模式的区别

看了UML都能发现,其实这个类图和策略模式的类图是一样的。
但是他们是很容易去区分的:

  • 策略模式是固定算法,Client端直接拿来使用 【PK】状态模式是给Client返回某些状态,让Client端内部改变自己的行为
  • 策略模式是被Client主动选择【PK】状态模式是帮忙管理Client不同状态下的行为,如果外力让状态改变,状态模式就会告诉Client它要小心应对了
  • 策略模式不会持有Context,因为一般都是Client选择【PK】状态模式需要持有Context

6.我的问题咋解决的

转载于:https://www.cnblogs.com/R0SS/p/5408544.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值