状态模式引导篇及原理
- 设计模式
- 时间:2019-09-16 09:35
- 6674人已阅读
🔔🔔🔔好消息!好消息!🔔🔔🔔
有需要的朋友👉:联系凯哥
状态模式引导篇及原理
讲解状态模式原理之前,我们先来模拟一个项目,然后对项目进行需求升级,发现之前设计不符合新需求了,从而来引导出状态模式原理。
模拟项目:一个糖果机(或者售票机)。智能糖果机,使用Java软件来控制糖果机.
本文出处凯哥Java(kaigejava)讲《23种设计模》系列教程种的《状态模式引导篇及原理》
需求分析:
我们来简化糖果机出糖果的过程:
开机-->待机状态-->投入硬币-->转动把手-->滑落一颗糖果-->待机(根据集群内糖果库存情况,是否提示售完)。
我们可以发现,出糖果的过程,就是机器的几个不同状态的。
说明:0初始化待机状态,1是投币 2是摇动手柄3是掉糖果。
我们先来看看传统是怎么实现的。
先给出(枚举或者列出)几个表示不同状态的code.
根据不同的code(状态),输出对应的消息:
上面代码,就能满足需求了。是不是很简单?但是,又有了新需求,加入游戏元素:中秋国庆双节,有10%的概率可以拿到2颗糖果!
思考怎么实现。
方案一:添加一个4的状态,用来标识10%的。就如下图了:
那再来个20%、45%怎么办?是不是还需要添加状态5、6?然后代码再一通的修改?这样是不是就违背了我们开闭原则?
我们需要思考的是:无论是原有的0-3还是新增加的4、5、6。这些都是状态的变化。
其中变化与不变的是什么?我们可以使用面向接口的思路来开发。
我们先列出表格,糖果机项目,状态和动作的关系如下表格:
我们结果分析,可以将状态抽取成一个接口。具体类图如下:
上图其实就是状态模式的类图。
什么是状态模式?
一句话概括:能根据内部状态的变化,来改变对象的行为,看起来好像是修改了类。属于行为类的模式。
上一篇: 看了这个Java实习生入职测试题后,幸亏我不是实习生
下一篇: 设计模式之状态模式总结篇