解释器模式说:“定义给定语言的语法表示形式, 以及使用该表示形式来解释语言中句子的解释器”。
基本上, 解释器模式的应用区域有限。我们只能在形式语法方面讨论口译员模式, 但是在这一领域有更好的解决方案, 这就是为什么它不经常使用的原因。
此模式可用于解析在简单语法(有时在简单规则引擎中)中定义的表达式。
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*+
评论前必须登录!
注册