生活中的设计模式之状态(State)模式
引子
“臣闻之,少而好学,如日出之阳;壮而好学,如日中之光;老而好学,如炳烛之明。炳烛之明,孰与昧行乎?”
--- 刘向《说苑·建本》
师旷将读书分为三个阶段,少年,壮年和老年。这三个阶段也代表了人生的三个状态。
我们可以将上段文字,用状态模式的思想来实现出来。
人生刚开始为少年(人生的状态设置为少年),这个时候读书(调用人生读书方法,就如日出之阳)
逝者如斯夫,人生到了壮年(人生的状态设置为壮年),这个时候读书就如日中之光
白发渔樵江渚上,人生迟暮(人生的状态设置为老年),这个时候读书就如炳烛之明了。
分析
首先人生的三个状态,那么需要有人生类,人生类包含状态切换成员函数及读书成员函数。
要有不同的状态类,每个状态类都有各自的读书成员函数,以及设置人生为当前状态的方法。
简单代码实现
人生类:
状态类:
场景类:
输出:
重要:在每个状态的读书成员方法中,都注释掉了人生状态切换的调用,是因为在场景类中单独的设置人生状态可能更加直观。
但是,状态模式下,每个状态的处理函数中,都有让主类有切换到其它状态的可能,这很重要。
比如,笔者最近碰到的飞行系统,根据每年的飞行里程分为普通会员,银卡会员,金卡会员。
当普通会员的飞行里程达到了银卡或者金卡的标准后,可以自动切换为银卡或者金卡会员
此时虽然是同样的卡片,但是却进行了不同的处理。