设计模式--状态(State)模式
生活随笔
收集整理的這篇文章主要介紹了
设计模式--状态(State)模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
模式定義
允許一個對象在其內部狀態改變時改變它的行為,從而使對象看起來似乎修改了其行為
類圖
要點總結
- State模式將所有與一個特定狀態相關的行為都放入一個State的子類對象中,在對象狀態切換時,切換相應的對象,但同時維持State的接口,這樣實現了具體操作與狀態轉換之間的解耦
- 為不同的狀態引入不同的對象使得狀態轉換變得更加明確,而且可以保證不會出現狀態不一致的情況,因為轉化是原子性的–即要么徹底轉化過來,要么不轉換
- 如果State對象沒有實例變量,那么各個上下文可以共享一個State對象,從而節省對象開銷
Go語言代碼實現
工程目錄
State.go
package Stateimport "fmt"type State interface {On(m *Machine)Off(m *Machine) }type Machine struct {current State }func NewMachine() *Machine{return &Machine{NewOff()} }func (m *Machine) setCurrent(s State) {m.current = s }func (m * Machine) On() {m.current.On(m) }func (m * Machine) Off() {m.current.Off(m) }type ON struct {}func NewON() State{return &ON{} } func (o *ON) On(m *Machine) {fmt.Println("設備已經開啟...") }func (o * ON) Off(m * Machine) {fmt.Println("從On的狀態到Off")m.setCurrent(NewOff()) }type OFF struct {}func NewOff() State{return &OFF{} }func (o *OFF) On (m *Machine) {fmt.Println("從Off狀態到On")m.setCurrent(NewON()) }func (o * OFF) Off(m * Machine) {fmt.Println("已經關閉") }State_test.go
package Stateimport "testing"func TestState(t *testing.T) {machine := NewMachine()machine.Off()machine.On()machine.On()machine.Off() }總結
以上是生活随笔為你收集整理的设计模式--状态(State)模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设计模式--中介者(Mediator)模
- 下一篇: 设计模式--备忘录(Memento)模式