解释器模式
解释器模式(Interpreter Pattern):给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
场景
例如:将“1+2+3-4”等字符串输入到Python的console,但是本身Python不认识这些字符串,就需要定义的一套文法规则来解释这些字符串,也就是设计一个自定义语言。
例如,SQL 解析、符号处理。
例如,同一份乐谱,用钢琴、小提琴分别解释会得到不同的音乐。
实现
就用同一份乐谱,分别用钢琴和小提琴来演奏,看看解释器模式的实现。
# 抽象解释器类
class AbstractExpression(object):
def interpret(self, context):
pass
# 钢琴解释器
class PianoExpression(AbstractExpression):
def interpret(self, context):
piano_dict = {"a": "钢琴的a", "b": "钢琴的b", "c": "钢琴的c"}
res = piano_dict.get(context.note)
print(res)
# 小提琴解释器
class ViolinExpression(AbstractExpression):
def interpret(self, context):
violin_dict = {"a": "小提琴的a", "b": "小提琴的b", "c": "小提琴的c"}
res = violin_dict.get(context.note)
print(res)
class Context(object):
def __init__(self):
self.note = ""
if __name__ == "__main__":
for i in ("a", "b", "c"):
ct = Context()
ct.note = i
arr_list = [PianoExpression(), ViolinExpression()]
for entry in arr_list:
entry.interpret(ct)
优点
1.可扩展性比较好,灵活。
2.增加了新的解释表达式的方式。
3.易于实现简单文法。
缺点
1.可利用场景比较少。
2.对于复杂的文法比较难维护,执行效率低。
3.解释器模式会引起类膨胀。