目录
0. 背景描述
每年的3月21号是24节气中的春分,记得有一首古诗是这样描述春分这个节气的。日月阳阴两均天,玄鸟不辞桃花寒。 从来今日竖鸡子,川上良人放纸鸢。大致意思就是说春天是万物复苏的季节,桃花开始盛开,燕子从南方归来,人们纷纷走出家门踏青,放风筝,感受暖暖的春意,享受季节轮转的玄妙,一年有四季,在每个季节中物种呈现的状态是不一样的,面对每一个不同的季节,都会有不同的展现(行为),比如对于一颗树来说,春季发芽长叶,夏天枝繁叶茂,秋天落叶纷纷,冬天雪压枝头。
在软件系统设计中,有时候我们要根据对象不同的状态做出不同的处理,通常我们的处理方式是在程序中使用if..else或者switch来判断对象的状态然后做出不同的处理,系统设计简单的时候这样做没问题,但是如果需要增加一种状态处理就必须修改原有的逻辑,扩展性很差,不符合设计模式的原则。
还是回到第一段的例子,我们看一棵树,四季可以说是树的四种状态,状态之间是可以转换的,每个状态呈现的行为也不一样,那么,如何让一个对象在不同的状态下展现不同的行为并且使程序有良好的易读性和扩展性,这就是我们今天要讲的状态模式。
1.状态模式介绍
1.1 状态模式定义
状态模式:状态模式允许一个对象在其内部改变状态时改变其行为,这个对象看上去就像是改变了他的类一样。
1.2 状态模式UML结构图
Context:环境类,关联了抽象状态接口。
State:抽象状态接口,定义了具体状态的抽象行为。
ConcreteState*:具体状态实现类,定义了一个具体状态的行为。
2. 状态模式的Java实现
本文以一棵树的四季变化为例,用Java代码简单的实现一个状态模式(Java版本为Java10)。
2.1 用例UML结构图