解释器模式

解释器模式说:“定义给定语言的语法表示形式, 以及使用该表示形式来解释语言中句子的解释器”。
【解释器模式】基本上, 解释器模式的应用区域有限。我们只能在形式语法方面讨论口译员模式, 但是在这一领域有更好的解决方案, 这就是为什么它不经常使用的原因。
此模式可用于解析在简单语法(有时在简单规则引擎中)中定义的表达式。
SQL解析使用解释器设计模式。 口译模式的优势

  • 更改和扩展语法更容易。
  • 实施语法很简单。
解释器模式的用法: 它用于:
  • 当语言的语法不复杂时。
  • 当效率不是重中之重时。
解释器模式示例
让我们通过上面的UML图了解解释器模式的示例。
解释器模式的UML:
解释器模式

文章图片
以上UML的实现 步骤1 创建一个模式界面。
public interface Pattern { public String conversion(String exp); }

第2步 创建一个InfixToPostfixPattern类, 该类将允许你转换哪种类型的模式。
import java.util.Stack; public class InfixToPostfixPattern implements Pattern{ @Override public String conversion(String exp) { int priority = 0; // for the priority of operators. String postfix = ""; Stack< Character> s1 = new Stack< Character> (); for (int i = 0; i < exp.length(); i++) { char ch = exp.charAt(i); if (ch == '+' || ch == '-' || ch == '*' || ch == '/'||ch=='%') { // check the precedence if (s1.size() < = 0) s1.push(ch); } else { Character chTop = (Character) s1.peek(); if (chTop == '*' || chTop == '/') priority = 1; else priority = 0; if (priority == 1) { if (ch == '*' || ch == '/'||ch=='%') { postfix += s1.pop(); i--; } else { // Same postfix += s1.pop(); i--; } } else { if (ch == '+' || ch == '-') { postfix += s1.pop(); s1.push(ch); } else s1.push(ch); } } } else { postfix += ch; } } int len = s1.size(); for (int j = 0; j < len; j++) postfix += s1.pop(); return postfix; } }// End of the InfixToPostfixPattern class.

第三步 创建一个将使用InfixToPostfix转换的InterpreterPatternClient类。
public class InterpreterPatternClient { public static void main(String[] args) { String infix = "a+b*c"; InfixToPostfixPattern ip=new InfixToPostfixPattern(); String postfix = ip.conversion(infix); System.out.println("Infix:" + infix); System.out.println("Postfix: " + postfix); } }

输出量
Infix:a+b*c Postfix: abc*+

    推荐阅读