首页 > 编程 > Python > 正文

Python设计模式编程中解释器模式的简单程序示例分享

2020-01-04 17:40:28
字体:
来源:转载
供稿:网友
这篇文章主要介绍了Python设计模式编程中解释器模式的简单程序示例分享,解释器模式强调用抽象类来表达程序中将要实现的功能,需要的朋友可以参考下
 

模式特点:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。

我们来看一下下面这样的程序结构:

class Context:  def __init__(self):    self.input=""    self.output=""class AbstractExpression:  def Interpret(self,context):    passclass Expression(AbstractExpression):  def Interpret(self,context):    print "terminal interpret"class NonterminalExpression(AbstractExpression):  def Interpret(self,context):    print "Nonterminal interpret"if __name__ == "__main__":  context= ""  c = []  c = c + [Expression()]  c = c + [NonterminalExpression()]  c = c + [Expression()]  c = c + [Expression()]  for a in c:    a.Interpret(context)

那么它所体现出的类图是这样的:

Python设计模式编程中解释器模式的简单程序示例分享

 

再来看一个例子:

#encoding=utf-8 # #by panda #解释器模式  def printInfo(info):   print unicode(info, 'utf-8').encode('gbk'),  #上下文类:演奏内容 class PlayContext():   text = None   PlayText = None  #抽象表达式类 class Expression():   def Interpret(self, context):     if len(context.PlayText) == 0:       return     else:       playKey = context.PlayText[0:1]       context.PlayText = context.PlayText[2:]       tmp = context.PlayText.index(' ') #找出第一个空格出现的位置       playValue = context.PlayText[0:tmp]       context.PlayText = context.PlayText[tmp+1:]       self.Excute(playKey,playValue)      def Excute(self,playKey,playValue):     pass  #音高 class Pitch(Expression):   pitch = None   def Excute(self, key, value):     value = int(value)     if value == 1:       self.pitch = '低音'     elif value == 2:       self.pitch = '中音'     elif value == 3:       self.pitch = '高音'     printInfo(self.pitch)      #音符 class Note(Expression):   Notes = {   'C':1,     'D':2,   'E':3,     'F':4,     'G':5,     'A':6,     'B':7,     }   note = None   def Excute(self, key, value):        self.note = self.Notes[key]     printInfo('%d' % self.note)   def clientUI():   context = PlayContext()   context.PlayText = "O 2 E 0.5 G 0.5 A 3 E 0.5 G 0.5 D 3 E 0.5 G 0.5 A 0.5 O 3 C 1 O 2 A 0.5 G 1 C 0.5 E 0.5 D 3 "   expression = None;   while(len(context.PlayText) > 0):     str = context.PlayText[0:1];     if(str == 'O'):       expression = Pitch()     elif(str == 'C' or str == 'D' or str == 'E' or str == 'F' or str == 'G' or str == 'A' or str == 'B' or str == 'P'):       expression = Note()     expression.Interpret(context)          return  if __name__ == '__main__':   clientUI(); 


类图:

Python设计模式编程中解释器模式的简单程序示例分享

 
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表