package interpreter;
import java.util.ArrayList;
import java.util.List;
/*
* 解释器模式:
* 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释解释语言中的句子
*
* 如果一种特定类型的问题发生的频率足够高,那么可能就值得讲该问题的各个势力表述为一个简单语言中的句子,
* 这样就可以构建一个解释器,该解释器通过解释这些句子来解决问题~
*
* 说白了这就像是一个翻译,对就是把一些经常使用的xxx 转换成 yyy
* 不是很懂 没关系 用 一个例子来说明。
* 小明想Kaitlyn表白 小明很笨 不会说英语 只能用汉语表白 这时候他写了一些程序 来把汉语转换成英语(当然这里不是真正的转换,只是强调这个英语转汉语的结果 而不是技术本身)
*
* 小笨也想跟Kaitlyn表白 但是小笨是韩国人 只会说韩语 他不会写程序 所以他找到小明,让小明在自己写的代码中加一个他的韩语转换英语,
* 小明这个人比较大度,写就写呗,公平竞争,无非也就是给抽象的解释器加一个子类而已
*
* 自己理解就到这里了 如果有问题可以相互讨论
*/
public class Interpreter {
public static void main(String[] args) {
List<Context> biaobai = new ArrayList<Context>();
//小笨开始表白内容
Context context = new Context();
context.setType("韩语");
context.setSentence("사 랑 해");
biaobai.add(context);
//小明表白内容
Context context2 = new Context();
context2.setType("中文");
context2.setSentence("我 爱 你");
biaobai.add(context2);
//解释器
for (Context cont : biaobai) {
Expresion expresion = null;
switch (cont.getType()) {
case "韩语":
expresion =new HExpresion();
break;
case "中文":
expresion =new CExpresion();
break;
default:
break;
}
//先判断是不是null 这里可能来一个小日本表白 那我是识别不了他的类型的
if(expresion != null){
expresion.Interpret(cont);
}
}
}
}
/*
* 生命一个抽象的解释操作
*/
abstract class Expresion{
protected abstract void Interpret(Context context);
}
/*
* 中文翻译
*/
class CExpresion extends Expresion{
protected void Interpret(Context context) {
//先判断内容是不是空
if(context == null || context.getSentence() == null){
System.out.println("说话啊!");
return;
}
//如果不是空 进行下边的处理
//以空格分割 获取: 我 爱 你
String [] msgs = context.getSentence().split(" ");
System.out.println("中文转英文:");
for (String msg : msgs) {
switch (msg) {
case "我":
System.out.print("I ");
break;
case "爱":
System.out.print("LOVE ");
break;
case "你":
System.out.print("YOU ");
break;
default:
break;
}
}
System.out.println("!");
}
}
/*
* 韩语翻译
*/
class HExpresion extends Expresion{
protected void Interpret(Context context) {
//先判断内容是不是空
if(context == null || context.getSentence() == null){
System.out.println("말해봐.");
return;
}
//如果不是空 进行下边的处理
//以空格分割 获取: 我 爱 你
System.out.println("韩语转英语:");
String [] msgs = context.getSentence().split(" ");
for (String msg : msgs) {
switch (msg) {
case "사":
System.out.print("I ");
break;
case "랑":
System.out.print("LOVE ");
break;
case "해":
System.out.print("YOU ");
break;
default:
break;
}
}
System.out.println("!");
}
}
/*
* 解释器之外的其他信息 比如存放需要翻译的句子 存放需要翻译语言的类型等
*/
class Context{
//语言类型
public String type ;
//语言内容
public String sentence;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getSentence() {
return sentence;
}
public void setSentence(String sentence) {
this.sentence = sentence;
}
}