状态模式Golang

状态模式

在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式

优点 和 缺点

优点:

  1. 封装转换规则
  2. 枚举可能的状态,在枚举状态之前需要确定状态种类

缺点:

  1. 状态模式的使用必然会增加系统类和对象的个数
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)
}

Powered by Hexo and Hexo-theme-hiker

Copyright © 2018 - 2021 Noonde All Rights Reserved.

UV : | PV :