在軟體的世界里存在著翻譯機,只不過在軟體中我們稱之為解釋器。在系統中如果某一特定類型的問題在頻繁的發生,此時我們就有必要將這些問題的實例表述為一個語言中句子, 因此可以構建一個解釋器,然後利用該解釋器來解釋這些句子來解決這些問題。選擇器模式 先看下類圖。 大話設計模式類圖 再看下筆者的例子。 運行結 ...
在軟體的世界里存在著翻譯機,只不過在軟體中我們稱之為解釋器。在系統中如果某一特定類型的問題在頻繁的發生,此時我們就有必要將這些問題的實例表述為一個語言中句子,
因此可以構建一個解釋器,然後利用該解釋器來解釋這些句子來解決這些問題。選擇器模式
先看下類圖。
大話設計模式類圖
再看下筆者的例子。
/** * 內容 */ 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
這是筆者對解釋器模式的理解,希望能夠幫助學習解釋器模式的小伙伴。