在 策略模式 那篇文章的最后,提到了一个问题:策略模式和状态模式在代码结构上几乎一样,但语义完全不同。那篇文章简要提了区别,这篇来详细展开。
先给一个直观感受:想象一部手机,它有「正常模式」和「静音模式」两种状态。来电话时,正常模式会响铃,静音模式只会震动。你不需要在接电话的代码里写 if-else 判断当前是什么模式,手机根据自己当前的状态自动选择行为。
状态模式(State Pattern)就是这个思路:把每种状态封装成独立的类,让对象根据内部状态的变化自动切换行为。
在 策略模式 那篇文章的最后,提到了一个问题:策略模式和状态模式在代码结构上几乎一样,但语义完全不同。那篇文章简要提了区别,这篇来详细展开。
先给一个直观感受:想象一部手机,它有「正常模式」和「静音模式」两种状态。来电话时,正常模式会响铃,静音模式只会震动。你不需要在接电话的代码里写 if-else 判断当前是什么模式,手机根据自己当前的状态自动选择行为。
状态模式(State Pattern)就是这个思路:把每种状态封装成独立的类,让对象根据内部状态的变化自动切换行为。