python版本的状态模式

# -*- coding:UTF-8 -*-
import abc


class State(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def handle(self, context):
        pass


class ConcreteStateA(State):
    def handle(self, context):
        context.state = ConcreteStateB()


class ConcreteStateB(State):
    def handle(self, context):
        context.state = ConcreteStateA()


class Context:
    def __init__(self, state):
        self.__state = state

    @property
    def state(self):
        return self.__state

    @state.setter
    def state(self, value):
        self.__state = value
        print("当前状态:%s" % self.__state.__class__.__name__)

    def request(self):
        self.__state.handle(self)


if __name__ == "__main__":
    c = Context(ConcreteStateA())
    c.request()
    c.request()
    c.request()
    c.request()
    c.request()

 

posted @ 2018-01-25 11:57  gjw  阅读(137)  评论(0)    收藏  举报