python版本的解释器模式

# -*- coding:UTF-8 -*-
from abc import ABCMeta, abstractmethod


class AbstractExpression(metaclass=ABCMeta):
    @abstractmethod
    def interpret(self, context):
        pass


class TerminalExpression(AbstractExpression):
    def interpret(self, context):
        print("终端解释器")


class NonTerminalExpression(AbstractExpression):
    def interpret(self, context):
        print("非终端解释器")


class Context:
    def __init__(self):
        self.__input = None
        self.__output = None

    @property
    def input(self):
        return self.__input

    @input.setter
    def input(self, value):
        self.__input = value

    @property
    def output(self):
        return self.__output

    @output.setter
    def output(self, value):
        self.__output = value


if __name__ == "__main__":
    context_ = Context()
    list_ = []
    list_.append(TerminalExpression())
    list_.append(NonTerminalExpression())
    list_.append(TerminalExpression())
    list_.append(TerminalExpression())
    for exp in list_:
        exp.interpret(context_)

 

posted @ 2018-01-25 14:06  gjw  阅读(92)  评论(0)    收藏  举报