狀態模式(python)

來源:互聯網
上載者:User

狀態模式:當一個對象的內在狀態改變時允許改變其行為,這個對象看起來像是改變了其類。
應用情境:一個對象的行為取決於它的狀態,即它必須在運行時刻根據狀態改變它的行為。如果控制狀態轉換的條件運算式過於複雜,就可以考慮使用狀態模式。
關鍵點:把狀態的判斷邏輯轉移到表示不同狀態的一系列類當中,這樣就可以簡化複雜的邏輯判斷了。
優點:將與特定狀態相關的行為局部化,並且將不同狀態的行為分割開來。

#encoding=utf-8##by panda#狀態模式def printInfo(info):    print unicode(info, 'utf-8').encode('gbk')#State:上班狀態基類class State():    def WriteProgram():        pass#上午工作狀態類class ForenoonState(State):    def WriteProgram(self,w):        if (w.Hour < 12):            printInfo("目前時間:%d點 工作狀態:上午工作,精神百倍" % w.Hour)        else:            w.SetState(noonState())            w.WriteProgram()            #中午工作狀態類class noonState(State):    def WriteProgram(self,w):        if (w.Hour < 13):            printInfo("目前時間:%d點 午飯;午休" % w.Hour)        else:            w.SetState(AfternoonState())            w.WriteProgram();            #下午工作狀態類class AfternoonState(State):    def WriteProgram(self,w):        if (w.Hour < 18):            printInfo("目前時間:%d點 下午狀態還不錯,繼續努力" % w.Hour)        else:            w.SetState(EveningState())            w.WriteProgram();#晚上工作狀態類class EveningState(State):    def WriteProgram(self,w):        if(w.TaskFinished):            w.SetState(RestState())            w.WriteProgram()            return                    if (w.Hour < 21):            printInfo("目前時間:%d點 加班哦,好累!" % w.Hour)        else:            w.SetState(SleepingState())            w.WriteProgram();#睡眠狀態class SleepingState(State):    def WriteProgram(self,w):        printInfo("目前時間:%d點 睡覺了" % w.Hour)#下班工作狀態class RestState(State):    def WriteProgram(self,w):        printInfo("目前時間:%d點 下班回家了" % w.Hour)            #Context:上班class Work():    state = ForenoonState();    TaskFinished = False    Hour = 8.0        def SetState(self, state):        self.state = state            def WriteProgram(self):        self.state.WriteProgram(self)def clientUI():    work = Work()        for i in range(9,23,1):        work.Hour = i        if(i > 19):            work.TaskFinished = True        work.WriteProgram()    returnif __name__ == '__main__':    clientUI();

類圖

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.