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 **/