因为解释器将被重复使用,所以在这里我们使用Flyweight模式来生成各种特定的解释器:
package com.design.interpret;
import java.util.Hashtable;
public class ExpressionFactory {
//使用hashtable变量储存编译器列表
private static Hashtable<Object, AbstractExpression> expressions = new Hashtable<Object, AbstractExpression>();
public static AbstractExpression createExpression(String text) {
String key = text.substring(0,1);
AbstractExpression expression = null;
switch (key) {
case "C":
case "D":
case "E":
case "F":
case "G":
case "A":
case "B":
expression = expressions.get("note");
if (expression == null) {
expression = new NoteExpression();
expressions.put("note", expression);
}
break;
case "O":
expression = expressions.get("scale");
if (expression == null) {
expression = new ScaleExpression();
expressions.put("scale", expression);
}
break;
case "S":
expression = expressions.get("speed");
if (expression == null) {
expression = new SpeedExpression();
expressions.put("speed", expression);
}
break;
}
//System.out.println(expressions.size());
return expression;
}
}
客户表现:
package com.design.interpret;
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
Context context = new Context() ;
//设置演奏文本
context.setPlayText("S 1500 O 2 E 0.5 G 0.5 A 3 E 0.5 G 0.5 D 3 E 0.5 "
+ "G 0.5 A 0.5 O 3 C 1 O 2 A 0.5 G 1 C 0.5 E 0.5 D 3 ");
AbstractExpression expression = null;
try {
while (context.getPlayText().length()>0) {
//使用享元模式
expression = ExpressionFactory.createExpression(context.getPlayText());
expression.interpret(context);
}
} catch (Exception e) {
}
}
}
性能:

以上.
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-159999-2.html
周边国家会重新选边站
让消费者方心
不过这也太黑了