java 之 解释器模式(大话设计模式)
在软件的世界里存在着翻译机,只不过在软件中我们称之为解释器。在系统中如果某一特定类型的问题在频繁的发生,此时我们就有必要将这些问题的实例表述为一个语言中句子,
因此可以构建一个解释器,然后利用该解释器来解释这些句子来解决这些问题。选择器模式
先看下类图。
大话设计模式类图

再看下笔者的例子。
/**
* 内容
*/
public class Context {
private String text;
public Context(String text) {
super();
this.text = text;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}/**
* 抽象父类
*/
public abstract class AbstractExpression {
public void Interpret(Context context) {
if (null != context.getText() && context.getText().length() > 0) {
String keyValue = context.getText().substring(0, 2);
String key = keyValue.substring(0, 1);
String value = keyValue.substring(1, 2);
excute(key, value);
if (context.getText().length() > 2) {
context.setText(context.getText().substring(3));
} else {
context.setText("");
}
}
}
public abstract void excute(String key, String value);
}/**
* 大写字母转义
*/
public class CharacterExpression extends AbstractExpression{
@Override
public void excute(String key, String value) {
System.out.print(key.getBytes()[0] + Integer.parseInt(value) + " ");
}
}/**
* 小写字母转义
*/
public class SmallExpression extends AbstractExpression {
@Override
public void excute(String key, String value) {
int tar = key.getBytes()[0] + Integer.parseInt(value);
System.out.print((char)tar + " ");
}
}/**
* 客户端
*/
public class Text {
public static void main(String[] args) {
Context context = new Context("A1 B2 C3 D4 a1 b1 c1 d2");
AbstractExpression expression = null;
while(context.getText().length() > 0) {
String first = context.getText().substring(0, 1);
if (Character.isLowerCase(first.charAt(0))) {
expression = new SmallExpression();
} else {
expression = new CharacterExpression();
}
expression.Interpret(context);
}
}
}运行结果如下
66 68 70 72 b c d f
这是笔者对解释器模式的理解,希望能够帮助学习解释器模式的小伙伴。
相关推荐
Lzs 2020-10-23
聚合室 2020-11-16
零 2020-09-18
Justhavefun 2020-10-22
ChaITSimpleLove 2020-10-06
周游列国之仕子 2020-09-15
afanti 2020-09-16
88234852 2020-09-15
YClimb 2020-09-15
风雨断肠人 2020-09-04
卖口粥湛蓝的天空 2020-09-15
stulen 2020-09-15
pythonxuexi 2020-09-06
abfdada 2020-08-26
梦的天空 2020-08-25