您的位置:首页 > 编程语言 > Java开发

Java设计模式《二十三》解释器模式

2017-04-22 15:03 267 查看
//解释器模式 给一个语言 定义它的文法的一种表示 并定义一个解释器
这个解释器使用该表示解释语言中的句子

文法按照一定规则将指向不同动作的字符拼接成一个字符串 供解释器分析成具体动作

//表达式
public abstract class Exception{
//解释器模式
public void Intepret(PlayContext context){
if(context.getText().length()==0){
return ;
}else{
String playKey = context.getText().subString(0,1);
context.setText(context.getText().subString(2));
double playValue =Double.parseDouble(context.getText().subString(0,context.getText().indexOf("")));

//由于传进来的是引用 此处修改了演奏内内容
contex.setText(contex.getText().subString(contex.getText().indexOf("")+1);
execute(playKey,playValue);
}
}
//抽象方法执行 不同的方法子类有不同的执行处理
public abstract void execute(String key,double value);
}

public Note extends Expression{
public void excute(String key, double value) {
String note = "";

if(key.equals("C")){
note = "1";
}else if(key.equals("D")){
note = "2";
}else if(key.equals("E")){
note = "3";
}else if(key.equals("G")){
note = "5";
}else if(key.equals("A")){
note = "6";
}else if(key.equals("B")){
note = "7";
}
System.out.println(note + " ");
}
}

/**
* 音阶类
*/
class Scale extends Expression {

@Override
public void excute(String key, double value) {
String scale = "";

switch ((int)value) {
case 1:
scale = "low";
break;
case 2:
scale = "mid";
break;
case 3:
scale = "high";
break;
}

System.out.println(scale + " ");
}
}

/**
* 速度类
*/
class Speed extends Expression {

@Override
public void excute(String key, double value) {
String speed;
if(value < 500)
speed = "slow";
else if(value >= 1000)
speed = "quick";
else
speed = "normal";

System.out.println(speed + " ");
}

}

/**
* 解释器模式,给定一个语言,定义它的文法的一种表示,并定义一个解释器,
* 这个解释器使用该表示来解释语言中的句子。
*
* 文法:按一定规则将执行不同动作的字符拼接成一个字符串,供解释器分析成具体动作。
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: