状态模式
2019-08-13 本文已影响0人
老九君
状态模式简述
在很多情况下我们对象的行为依赖于它的一个或者多个变化的属性,这些可变的属性我们称之为状态,也就是说行为依赖状态,即当该对象因为在外部的互动而导致他的状态发生变化,从而它的行为也会做出相应的变化。对于这种情况,我们是不能用行为来控制状态的变化,而应该站在状态的角度来思考行为,即是什么状态就要做出什么样的行为。这个就是状态模式。
先来看这样一个示例。
下面使用策略模式重写上面的例子
优缺点及适用情况
优点:
封装了转换规则
枚举可能的状态,在枚举状态之前需要确定状态种类
将所有与某个状态有关的行为放到一个类中,并且可以方便地增加新的状态,只需要改变对象状态即可改变对象的行为
允许状态转换逻辑与状态对象合成一体,而不是某一个巨大的条件语句块
可以让多个环境对象共享一个状态对象,从而减少系统中对象的个数
缺点:
状态模式的使用必然会增加系统类和对象的个数
状态模式的结构与实现都较为复杂,如果使用不当将导致程序结构和代码的混乱
状态模式对”开闭原则”的支持并不太好,对于可以切换状态的状态模式,增加新的状态类需要修改那些负责状态转换的源代码,否则无法切换到新增状态,而且修改某个状态类的行为也需修改对应类的源代码
适用情况:
在行为受状态约束的时,且状态不超过5个
老九学堂出品,转载请私信哦
对于文章内容有不理解的可以添加老九君个人QQ:614940318,请备注来自简书
老九学堂免费C、C++、Java课程地址:
https://study.163.com/courses-search?keyword=%E8%80%81%E4%B9%9D%E5%AD%A6%E5%A0%82