python 狀態模式

什麼是狀態模式?

指的是對象內部狀態發生改變對象行爲也會發生變化。
狀態模式主要解決的是當控制一個對象狀態的條件表達式過於複雜時的狀況。把狀態的判斷邏輯轉移到表示不一樣狀態的一系列類中,能夠把複雜的判斷邏輯簡化。

UML類圖

 

 

 

封裝變化

該模式中狀態是變化的,變化部分被作成了抽象類或接口,這讓作的目的就是把變化的轉化爲穩定的spa

代碼示例

import abc

'''
例子:燈的狀態
'''


class AbsStatus(abc.ABC):

    @abc.abstractmethod
    def action(self, context): ...


class Bulb:
    def __init__(self, status: AbsStatus):
        self._status = status

    @property
    def status(self):
        return self._status

    @status.setter
    def status(self, value: AbsStatus):
        self._status = value

    def action(self):
        self.status.action(self)


class OnStatus(AbsStatus):

    def action(self, context):
        print("當前狀態:開燈")
        context.status = OffStatus()


class OffStatus(AbsStatus):

    def action(self, context):
        print("當前狀態:關燈")
        context.status = OnStatus()


buld = Bulb(OffStatus())
buld.action()     # 當前狀態:關燈
buld.action()     # 當前狀態:開燈
buld.action()    # 當前狀態:關燈
buld.action()    # 當前狀態:開燈
相關文章
相關標籤/搜索