http://www.books.com.tw/products/0010750585
chap19.
解譯器模式 Interpreter
目的:定義一個語言與其文法,使用一個解譯器來表示這個語言的敘述
package com.ssc24.chap19.demo01; public class Context { private String text; public String getText() { return text; } public void setText(String text) { this.text = text; } }
package com.ssc24.chap19.demo01; public abstract class Expression { public void interprep(String str) { if (str.length() > 0) { String text = str.substring(1,str.length()); Integer number = Integer.valueOf(text); excute(number); } } protected abstract void excute(Integer number); }
package com.ssc24.chap19.demo01; public class DownExpression extends Expression { @Override protected void excute(Integer number) { System.out.print(number / 2 + " "); } }
package com.ssc24.chap19.demo01; public class UpExpression extends Expression { @Override protected void excute(Integer number) { System.out.print(number * 2 + " "); } }
package com.ssc24.chap19.demo01; import static org.junit.Assert.*; import org.junit.Test; public class InterpretTest { @Test public void test() { Expression ex ; Context context = new Context(); context.setText("A4461 B1341 A676 B1787"); System.out.println("===解譯器模式測試==="); System.out.println("待解譯內容為:" + context.getText()); System.out.println("---解譯結果---"); for (String str : context.getText().split("\\s")) { if (str.charAt(0) == 'A') { ex = new UpExpression(); } else { ex = new DownExpression(); } ex.interprep(str); } } }
/** ===解譯器模式測試=== 待解譯內容為:A4461 B1341 A676 B1787 ---解譯結果--- 8922 670 1352 893 **/