在软件的世界里存在着翻译机,只不过在软件中我们称之为解释器。在系统中如果某一特定类型的问题在频繁的发生,此时我们就有必要将这些问题的实例表述为一个语言中句子,
因此可以构建一个解释器,然后利用该解释器来解释这些句子来解决这些问题。选择器模式
先看下类图。
大话设计模式类图
再看下笔者的例子。
/** * 内容 */ 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
这是笔者对解释器模式的理解,希望能够帮助学习解释器模式的小伙伴。