什麼是狀態模式? 指的是對象內部狀態發生改變對象行為也會發生變化。 狀態模式主要解決的是當控制一個對象狀態的條件表達式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同狀態的一系列類中,可以把複雜的判斷邏輯簡化。 UML類圖 封裝變化 該模式中狀態是變化的,變化部分被做成了抽象類或介面,這讓做的目的就 ...
什麼是狀態模式?
指的是對象內部狀態發生改變對象行為也會發生變化。
狀態模式主要解決的是當控制一個對象狀態的條件表達式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同狀態的一系列類中,可以把複雜的判斷邏輯簡化。
UML類圖
封裝變化
該模式中狀態是變化的,變化部分被做成了抽象類或介面,這讓做的目的就是把變化的轉化為穩定的
代碼示例
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() # 當前狀態:開燈