golang 狀態模式

2021-10-23 18:05:20 字數 1201 閱讀 6162

狀態模式把受環境改變的物件行為包裝在不同的狀態物件裡,其意圖是讓乙個物件在其內部狀態改變的時候,其行為也隨之改變。現在我們來分析其基本結構和實現方法。

狀態模式包含以下主要角色。

抽象狀態(state)角色:定義乙個介面,用以封裝環境物件中的特定狀態所對應的行為。

具體狀態(concrete state)角色:實現抽象狀態所對應的行為。

物件(即上文中的context)會根據自己不同的狀態,對客戶端呼叫自己產生不同的行為,context通過持有乙個狀態(state)引用,擁有了乙個狀態資訊。當我們呼叫context物件的方法時,context可以根據自己當前的狀態來決定什麼樣的行為,同時,也決定了,在執行完方法後,怎樣更改自己的狀態。

示例中人(context)擁有兩個狀態,飢餓和不飢餓,飢餓時,呼叫工作方法,人也會不工作,不飢餓時,即便呼叫吃飯,也不會吃飯。同時,當呼叫人的吃飯方法時,人會從飢餓狀態變為不飢餓狀態。呼叫人的工作方法後,人會由不飢餓狀態變為飢餓狀態。

package main

import

"fmt"

//狀態設計模式:

//1.抽象狀態類(飢餓狀態)

//2.環境類(人)

func

main()

//人,環境類

type person struct

func

(person *person)

eat(

)else

}func

(person *person)

work()

else

}//抽象狀態類 飢餓介面

type ihungry inte***ce

//具體狀態類

Golang 設計模式

策略模式 strategy 簡介 策略模式 將演算法或操作抽象成實現共同介面 可以被替換的類,實現邏輯和具體演算法的解耦。將各種行為抽象成演算法,封裝演算法為物件 演算法實現共同介面,呼叫者呼叫時不考慮演算法具體實現,呼叫介面方法即可 呼叫者可隨時替換此演算法物件 應用場景 多個方法選擇一使用,且它...

Golang 工廠模式

golang 工廠模式 golang 的結構體沒有建構函式,通常可以使用工廠模式來解決這個問題。看乙個需求 乙個結構體的宣告是這樣的 package model type student struct 因為這裡的student 的首字母s 是大寫的,如果我們想在其它包建立 student 的例項 比...

Golang設計模式 工廠模式

定義乙個用於建立物件的介面,讓子類界定例項化哪個類。工廠方法使乙個類的例項化延遲到子類。簡單工廠模式的最大優點在於工廠類中包含了必要的邏輯判斷,根據客戶的選擇動態例項化相關的類,對於客戶端來說,去除了與具體產品的依賴。如果是翻譯,讓客戶端不管用哪個類的例項,只需把翻譯型別 int 1,2,3 給工廠...