一、前言
解释器模式,就像我们生活场景中的翻译一样,它给定某种语言,并定义它的文法表示,解释器通过这种标识来对语句进行翻译。解释器模式一般很少用于我们的代码开发中,不到万不得已我们是不会考虑 解释器这种设计模式的。因为这种设计模式应用场景很少,而且需要的类也很多,很容易引起类膨胀,复杂的语法也使得其难以维护。
二、解释器模式
概述:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
应用场景:
1、编译器
2、运算表达式
解释器确实在我们开发中很少用到,因为这种设计模式的适用场景很少,但是这种设计模式也有一些好处的:
1、可扩展性比较好,灵活。 2、增加了新的解释表达式的方式。 3、易于实现简单文法。
三、代码展示
我们通过一个简单的翻译例子来展示解释器模式 。
3.1 翻译接口
/**
* 翻译接口
* @author Deng
*
*/
public interface Translate {
void translate(String word);
}
3.2 实现类
/**
* 中文翻译英文
* @author Deng
*
*/
public class C_ETranslate implements Translate{
private Map<String, String> wordMap;
public C_ETranslate(Map<String, String> wordMap) {
this.wordMap = wordMap;
// TODO Auto-generated constructor stub
}
@Override
public void translate(String word) {
// TODO Auto-generated method stub
String result = wordMap.get(word);
if(result != null)
{
System.out.println(word +" 翻译:"+result);
return;
}
System.out.println("抱歉,词库未录入:"+ word);
}
}
3.3 词库提供类
public class WordPool {
public static Map<String, String> getWordMap()
{
Map<String, String> wordMap =new HashMap<>();
wordMap.put("你好", "Hello");
wordMap.put("男", "man");
wordMap.put("女", "woman");
wordMap.put("红", "red");
return wordMap;
}
}
3.4 结果
public class Test {
public static void main(String[] args) {
Map<String,String> wordMap = WordPool.getWordMap();
C_ETranslate c_ETranslate = new C_ETranslate(wordMap);
c_ETranslate.translate("男");
c_ETranslate.translate("女");
c_ETranslate.translate("红");
c_ETranslate.translate("好");
}
}
男 翻译:man
女 翻译:woman
红 翻译:red
抱歉,词库未录入:好