解释器模式:
给定一种语言,定义它的文法表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。典型的解释器模式中会有终结符和非终结符之说,语法也根据两种终结符,决定语句最终含义。
实例:
要开发一个自动识别谱子的吉他模拟器,达到录入谱即可按照谱发声的效果。除了发声设备外(假设已完成),最重要的就是读谱和译谱能力了。分析其需求,整个过程大致上分可以分为两部分:根据规则翻译谱的内容;根据翻译的内容演奏。
代码实现:
class PlayContext(): #负责定义谱子
play_text = None
class Expression():
def interpret(self, context): #负责转译谱
if len(context.play_text) == 0:
return
else:
play_segs=context.play_text.split(" ")
for play_seg in play_segs:
pos=0
for ele in play_seg:
if ele.isalpha():
pos+=1
continue
break
play_chord = play_seg[0:pos]
play_value = play_seg[pos:]
self.execute(play_chord,play_value)
def execute(self,play_key,play_value): #负责演奏
pass
class NormGuitar(Expression):
def execute(self, key, value): #具体的终端解释器,覆写execute,以吉他 的方式演奏
print "Normal Guitar Playing--Chord:%s Play Tune:%s"%(key,value)
class Piano(Expression):
def execute(self, key, value): #具体的终端解释器,覆写execute,以钢琴 的方式演奏
print "Normal Guitar Playing--Chord:%s Play Tune:%s"%(key,value)
if __name__=="__main__":
context = PlayContext()
context.play_text = "C53231323 Em43231323 F43231323 G63231323"
guitar=NormGuitar()
guitar.interpret(context)
piano = Piano()
piano.interpret(context)
实际开发运用:
根据上传的简历的语种,选择用具体的终端解释器去处理简历。