Python設計模式之狀態模式原理與用法詳解

2022-10-03 18:12:12 字數 1968 閱讀 6152

狀態模式(state pattern):當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類

下面是乙個狀態模式的demo:

#!/usr/bin/env python

# -*- coding:utf-8 -*-

__author__ = 'andy'

"""大話設計模式

設計模式——狀態模式

狀態模式(state pattern):當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類

應用場景:當控制乙個物件的狀態轉換的條件表示式過於複雜時,把狀態的判斷邏輯轉移到表示不同狀態的一系列類當中,可以把複雜的判斷邏輯簡化

(當乙個物件的行為取決於它的狀態,並且它必須在執行時刻根據狀態改變他的行為)

"""class state(object):

__init__(self

pass

def write_program(self, w):

pass

class work(object):

def __init__(self):

self.hour = 9

self.curr = forenoonstate()

def set_state(self, s):

self.curr = s

def write_program(self):

self.curr.write_program(self)

class forenoonstate(state):

def write_program(self, w):

if w.hour < 12:

print "當前時間:%s點,"%w.hour,"精神百倍"

else:

w.set_state(afternoonstate())

wsaugscs.write_program()

class afternoonstate(state):

def write_program(self, w):

if w.hour < 17:

print "當前時間:%s點,"%w.hour,"狀態還行,繼續努力"

else:

w.set_state(eveningstate())

w.write_program()

class eveningstate(state):

def write_program(self, w):

if w.hour < 21:

print "當前時間:%s點,"%w.hour,"加班呢,疲勞了"

else:

w.set_state(sleepstate())

w.write_program()

class sleepstate(state):

def write_program(self, w):

pr "當前時間:%s點,"%w.hour,"不行了,睡著了"

if __name__=="__main__":

work = work()

work.hour = 9

work.write_program()

work.hour = 15

work.write_program()

work.hour = 20

work.write_program()

work.hour = 22

work.write_program()

執行結果:

當前時間:9點, 精神百倍

當前時間:15點, 狀態還行,繼續努力

當前時間:20點, 加班呢,疲勞了

當前時間:22點, 不行了,睡著了

上面類的設計如下圖:

應用場景:當控制乙個物件的狀態轉換的條件表示式過於複雜時,把狀態的判斷邏輯轉移到表示不同狀態的一系列類當中,可以把複雜的判斷邏輯簡化

(當乙個物件的行為取決於它的狀態,並且它必須在執行時刻根據狀態改變他的行為)

python設計模式之狀態模式

狀態模式是一種常用的模式,和名字一樣,可以在呼叫時修改其內部屬性,看起來就像改變了類的狀態 class networkcardstate 基類 defsend self raise notimplementederror defreceive self raise notimplementederr...

Python設計模式之狀態模式

狀態模式和責任鏈模式是真的很像 狀態模式學習鏈結 責任鏈模式和狀態模式對比 usr bin python coding utf8 狀態模式 usr bin env python coding utf 8 author andy 大話設計模式 設計模式 狀態模式 狀態模式 state pattern ...

設計模式之狀態模式

一 作用 允許乙個物件在其內部狀態改變時改變它的行為,物件看起來似乎修改了它的類。其別名為狀態物件 objects for states 狀態模式是一種物件行為型模式。二 例子 狀態抽象類 abstract class state 具體狀態類,每個狀態對應乙個類 class concretestat...