首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

状态模式引导篇及原理

状态模式引导篇及原理

讲解状态模式原理之前,我们先来模拟一个项目,然后对项目进行需求升级,发现之前设计不符合新需求了,从而来引导出状态模式原理。

模拟项目:一个糖果机(或者售票机)。智能糖果机,使用Java软件来控制糖果机.

本文出处凯哥Java(kaigejava)讲《23种设计模》系列教程种的《状态模式引导篇及原理》

需求分析:

我们来简化糖果机出糖果的过程:

开机-->待机状态-->投入硬币-->转动把手-->滑落一颗糖果-->待机(根据集群内糖果库存情况,是否提示售完)。

我们可以发现,出糖果的过程,就是机器的几个不同状态的。

说明:0初始化待机状态,1是投币 2是摇动手柄3是掉糖果。

我们先来看看传统是怎么实现的。

先给出(枚举或者列出)几个表示不同状态的code.

根据不同的code(状态),输出对应的消息:

上面代码,就能满足需求了。是不是很简单?但是,又有了新需求,加入游戏元素:中秋国庆双节,有10%的概率可以拿到2颗糖果!

思考怎么实现。

方案一:添加一个4的状态,用来标识10%的。就如下图了:

那再来个20%、45%怎么办?是不是还需要添加状态5、6?然后代码再一通的修改?这样是不是就违背了我们开闭原则?

我们需要思考的是:无论是原有的0-3还是新增加的4、5、6。这些都是状态的变化。

其中变化与不变的是什么?我们可以使用面向接口的思路来开发。

我们先列出表格,糖果机项目,状态和动作的关系如下表格:

我们结果分析,可以将状态抽取成一个接口。具体类图如下:

上图其实就是状态模式的类图。

什么是状态模式?

一句话概括:能根据内部状态的变化,来改变对象的行为,看起来好像是修改了类。属于行为类的模式。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190916A04V4S00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券