状态(State)模式的定义:对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。
状态模式是一种对象行为型模式,其主要优点如下。
1 状态模式将与特定状态相关的行为局部化到一个状态中,并且将不同状态的行为分割开来,满足“单一职责原则”。
2 减少对象间的相互依赖。将不同的状态引入独立的对象中会使得状态转换变得更加明确,且减少对象间的相互依赖。
3 有利于程序的扩展。通过定义新的子类很容易地增加新的状态和转换。
状态模式的主要缺点如下。
1 状态模式的使用必然会增加系统的类与对象的个数。
2 状态模式的结构与实现都较为复杂,如果使用不当会导致程序结构和代码的混乱。
class Gate {
var context:Context
init(context: Context) {
self.context = context;
}
// 守门员
func gateMan() {
self.context.change()
}
}
class Context {
var state: State = CloseState()
func change() {
self.state.change(context: self);
}
func currentState() {
self.state.info()
}
}
protocol State {
func info()
func change(context:Context)
}
class OpenState: State {
func change(context: Context) {
context.state = CloseState()
}
func info() {
print("大门打开")
}
}
class CloseState: State {
func change(context: Context) {
context.state = OpenState()
}
func info() {
print("大门关闭")
}
}
let gate = Gate(context: Context())
gate.context.currentState()
gate.gateMan()
gate.context.currentState()
//大门关闭
//大门打开