python設計模式(二十一) 狀態模式

2021-09-11 07:31:13 字數 1759 閱讀 1456

狀態模式,當物件的內部狀態改變的時候,允許物件執行不同的流程,看起來就像改寫了乙個物件,核心的方法是把複雜狀態變化情況下的流程抽象出來,簡化複雜情況狀態的判斷。

我們設計乙個應用場景:當狀態是cpu使用率,在不同狀態下的自動化運維指令碼執行不同的操作

示例code:

class base:

def executor(self, value):

self.run(value)

class low(base):

def __init__(self):

self.name = "較低佔用率狀態"

def run(self, value):

print("當前:{} 值:{}".format(self.name, value))

print("無應急情況執行")

class large(base):

def __init__(self):

self.name = "較高佔用率狀態"

def run(self, value):

print("當前:{} 值:{}".format(self.name, value))

print("傳送警報郵件")

class statu:

def __init__(self):

self.value = 0.1

self.low = low()

self.large = large()

self.ststu = none

def monitor(self):

if self.value <0.5:

self.ststu = self.low

else:

self.ststu = self.large

self.ststu.executor(self.value)

if __name__ == '__main__':

test = statu()

test.monitor()

test.value = 0.9

test.monitor()

當前:較低佔用率狀態 值:0.1

無應急情況執行

當前:較高佔用率狀態 值:0.9

傳送警報郵件

優點:1、封裝了轉換規則。

2、列舉可能的狀態,在列舉狀態之前需要確定狀態種類。

3、將所有與某個狀態有關的行為放到乙個類中,並且可以方便地增加新的狀態,只需要改變物件狀態即可改變物件的行為。

4、允許狀態轉換邏輯與狀態物件合成一體,而不是某乙個巨大的條件語句塊。

5、可以讓多個環境物件共享乙個狀態物件,從而減少系統中物件的個數。

缺點:

1、狀態模式的使用必然會增加系統類和物件的個數。

2、狀態模式的結構與實現都較為複雜,如果使用不當將導致程式結構和**的混亂。

3、狀態模式對"開閉原則"的支援並不太好,對於可以切換狀態的狀態模式,增加新的狀態類需要修改那些負責狀態轉換的源**,否則無法切換到新增狀態,而且修改某個狀態類的行為也需修改對應類的源**。

使用場景:1、行為隨狀態改變而改變的場景。 2、條件、分支語句的代替者。

注意事項:在行為受狀態約束的時候使用狀態模式,而且狀態不超過 5 個。

設計模式(二十一) 狀態模式

狀態模式也是一種行為型模式,當我們的程式中需要一些狀態轉換,對於不同的狀態需要不同的行為時,我們就可以考慮使用狀態模式。下面用交通燈來當例子。我們需要紅黃綠三種顏色的狀態。inte ce state class redstate implements state class yellowstate ...

設計模式(二十一) 狀態模式

狀態模式也是一種行為型模式,當我們的程式中需要一些狀態轉換,對於不同的狀態需要不同的行為時,我們就可以考慮使用狀態模式。下面用交通燈來當例子。我們需要紅黃綠三種顏色的狀態。inte ce state class redstate implements state class yellowstate ...

(二十一)狀態模式詳解(DOTA版)

本次lz給各位介紹狀態模式,之前在寫設計模式的時候,引入了一些小故事,二十章職責連模式是故事版的最後一篇,之後還剩餘四個設計模式,lz會依照原生的方式去解釋這幾個設計模式,特別是原型模式和直譯器模式,會包含一些其它的內容。好了,接下來,我們先來看看狀態模式的定義吧。定義 源於design patte...