{
Value = value;
}
public void Interpret(StringBuilder sb)
{
sb.Append(ChineseToEnglishDict.GetEnglish(Value.ToLower()));
}
}
public static class Translators
{
public static string EnglishToChinsesTranslator(string sentense)
{
StringBuilder sb=new StringBuilder();
List<IExpressions> expressions = new List<IExpressions>();
expressions.Add(new EnglishWordExpression(sentense));
foreach (IExpressions e in expressions)
{
e.Interpret(sb);
}
return sb.ToString();
}
public static string ChinsesToEnglishTranslator(string sentense)
{
StringBuilder sb = new StringBuilder();
List<IExpressions> expressions = new List<IExpressions>();
expressions.Add(new ChineseWordExpression(sentense));
foreach (IExpressions e in expressions)
{
e.Interpret(sb);
}
return sb.ToString();
}
}[/mw_shl_code]
首先实现一个ChineseToEnglishDict 中英文翻译字典类, 里面存放一个字典,存放我们的中英文字典,为了方便,我们也在里面把字典的内容填充好, 其实正确的做法是做两个 中英文的静态表存起来,分别从两个表取。解释器设计模式然后里面还有两个方法 中文转英文和英文转中文, 就是从字典的key取value或者value取key。
接下来是一个IExpressions 虚拟翻译类,里面的Interpret虚拟方法我用了StringBuilder来代替示例代码的string,毕竟我们是要不断改写内容的。
然后 再写两个实体翻译类,一个中转英,一个英转中,就是分别调用中英文翻译字典类的方法而已,最后 一个 静态翻译工具类,里面做的事就是我们在示例代码的实现类似,把重复使用的封装起来,看起来更简洁。好,现在看实现代码
[mw_shl_code=csharp,true] string english1 = "skills";
string chinese1 = Translators.EnglishToChinsesTranslator(english1);
Console.WriteLine(chinese1);
string chinese2 = "好友";
string english2 = Translators.ChinsesToEnglishTranslator(chinese2);
Console.WriteLine(english2);[/mw_shl_code]
这里实现代码是不是比示例更加简便了,传入一个需要翻译的字,然后在接收,输出。一气呵成。我们运行下看看结果

Interpreter 解释器模式的介绍就是以上内容,我们最后再来总结下,解释器模式属于行为模式,Gof是这样定义的:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
解释器模式需要解决的是,如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。
最后提供示例的工程文件,希望能和大家一起学习进步。
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-34239-3.html
重庆晨报的记者收了多少钱啊
他的声音真的很棒
总在说数量