状态模式
在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式
优点 和 缺点
优点:
- 封装转换规则
- 枚举可能的状态,在枚举状态之前需要确定状态种类
缺点:
- 状态模式的使用必然会增加系统类和对象的个数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| type State interface { Handle(context *Context) } type ConcreteStateA struct { }
func (state *ConcreteStateA) Handle(context *Context) { fmt.Println("A current state") context.SetState(new(ConcreteStateA)) }
type ConcreteStateB struct { }
func (state *ConcreteStateB) Handle(context *Context) { fmt.Println("B current state") context.SetState(new(ConcreteStateB))
}
type Context struct { state State }
func (context *Context) Init() { context.state = new(ConcreteStateA) } func (context *Context) SetState(state State) { context.state = state } func (context *Context) GetState() State { return context.state } func (context *Context) Handle() { context.state.Handle(context) }
|