解释器模式说:“定义给定语言的语法表示形式, 以及使用该表示形式来解释语言中句子的解释器”。
【解释器模式】基本上, 解释器模式的应用区域有限。我们只能在形式语法方面讨论口译员模式, 但是在这一领域有更好的解决方案, 这就是为什么它不经常使用的原因。
此模式可用于解析在简单语法(有时在简单规则引擎中)中定义的表达式。
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*+
推荐阅读
- 迭代器模式
- 拦截过滤器模式
- 前端控制器模式
- 享元模式
- 工厂方法模式
- 外观模式
- Win10怎样解除U盘“写保护”技巧
- Win10为U盘增加“写保护”技巧图文详细教程
- Win10文件资源管理器标题栏显示进程ID图文详细教程