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; } }
27.解释器模式
原创
©著作权归作者所有:来自51CTO博客作者木子的昼夜的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
小谈设计模式(28)—解释器模式
对Java设计模式中解释器模式进行详细讲解分析
Express 解释器模式 语法规则 -
27. 单例模式
单例模式 - 打印机案例。单例模式-主席类案例。
单例模式 实例化 #include -
设计模式(27) -- 解释器模式
文章目录需求分析解释器模式基本介绍原理图解释器模式实现四则运算spring源
设计模式 解释器模式 递归 四则运算 -
27. JSP
27. JSP1.什么是 jsp,它有什么用?jsp 的全换是 java server pages。Java 的服务器页面。jsp 的主要作用是代替 Servlet 程序回传 html 页...
java python spring jsp servlet -
27. 移除元素
27. 移除元素
java