提供了评估语言和表达式的方式
使用场景
- 解决重复类型的问题,
- 通过构建语法树解释语音
Demo
"""
解释器模式
"""
class Expression:
def interpret(self, context):
raise NotImplementedError()
class TerminalExpression(Expression):
def __init__(self, data: str):
self.data = data
def interpret(self, context: str):
if context.find(self.data) > -1:
return True
return False
class OrExpression(Expression):
def __init__(self, expr1: Expression, expr2: Expression):
self.expr1 = expr1
self.expr2 = expr2
def interpret(self, context):
return self.expr1.interpret(context) or self.expr2.interpret(context)
class AndExpression(Expression):
def __init__(self, expr1: Expression, expr2: Expression):
self.expr1 = expr1
self.expr2 = expr2
def interpret(self, context):
return self.expr1.interpret(context) and self.expr2.interpret(context)
def get_male_expression():
r = TerminalExpression('r')
m = TerminalExpression('m')
return OrExpression(r, m)
def get_married_woman_expression():
j = TerminalExpression('j')
m = TerminalExpression('m')
return AndExpression(j, m)
if __name__ == '__main__':
is_male = get_male_expression()
print("r is male:", is_male.interpret('r'))
is_married_expression = get_married_woman_expression()
print(f"ju is a married women:", is_married_expression.interpret('j m'))