理解设计模式(二十)——状态模式
状态模式
提出问题
一个对象存在着不同的状态,不同的状态下对象的行为会有所不同(就是说函数执行的内容不同)。例如一个账户有余额为正、余额为0这两种状态。余额为正时可以取钱,余额为0时不能取钱。那么正常情况下,我们可能会设计一个取钱函数,在函数里对于账户的余额进行if判断,执行相应的操作。那么我们又要来思考这个老生常谈的问题了,万一要发生变化呢?
例如,我现在再增加一个透支的状态,透支额度小于2000也可以取钱,只是要收手续费。我们要在取钱函数里加一个判断条件吗?这违反了设计模式的开闭原则。该怎么解决这个问题呢?
解决问题
还是老一套,封装。把要变化的东西封装起来。这里取钱函数可能会发生变化,那么我们就把不同状态下的取钱函数封装成一个状态对象的方法(其实你直接封装成几个函数也行,就是把不同状态下不同的行为拆分到不同的地方就行,只要你能调用就行)。
下面还是直接上代码:
// 封装成几个函数 |