生活中的设计模式之状态(State)模式

引子

“臣闻之,少而好学,如日出之阳;壮而好学,如日中之光;老而好学,如炳烛之明。炳烛之明,孰与昧行乎?”

                                                                                                                                                       --- 刘向《说苑·建本》

师旷将读书分为三个阶段,少年,壮年和老年。这三个阶段也代表了人生的三个状态。

我们可以将上段文字,用状态模式的思想来实现出来。

人生刚开始为少年(人生的状态设置为少年),这个时候读书(调用人生读书方法,就如日出之阳)

逝者如斯夫,人生到了壮年(人生的状态设置为壮年),这个时候读书就如日中之光

白发渔樵江渚上,人生迟暮(人生的状态设置为老年),这个时候读书就如炳烛之明了。

分析

首先人生的三个状态,那么需要有人生类,人生类包含状态切换成员函数及读书成员函数。

要有不同的状态类,每个状态类都有各自的读书成员函数,以及设置人生为当前状态的方法。

简单代码实现

人生类:

生活中的设计模式之状态(State)模式

状态类:

生活中的设计模式之状态(State)模式

场景类:

生活中的设计模式之状态(State)模式

输出:

重要:在每个状态的读书成员方法中,都注释掉了人生状态切换的调用,是因为在场景类中单独的设置人生状态可能更加直观。

但是,状态模式下,每个状态的处理函数中,都有让主类有切换到其它状态的可能,这很重要。

比如,笔者最近碰到的飞行系统,根据每年的飞行里程分为普通会员,银卡会员,金卡会员。

当普通会员的飞行里程达到了银卡或者金卡的标准后,可以自动切换为银卡或者金卡会员

此时虽然是同样的卡片,但是却进行了不同的处理。