解释器模式
Posted 梦
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解释器模式相关的知识,希望对你有一定的参考价值。
解释器模式就类似百度翻译,还有就是模板引擎,加密算法等。
就是在不控的情况下,输入的内容不能确定。按照一定的规律来生成结果
特点如下:
1、需求(对于百度翻译来说、输入的内容在开发时不能确定。加密算法也是一样,用户要加密什么内容。你在编程时不知道,所以要动态处理)不确定
2、按规律来翻译内容
例子中,将用户输入的内容字母小写转大写、数字变成汉字输出
代码如下:
抽象出表达式抽像类,抽像的仅供方法。
public abstract class BaseExpression { public abstract void Translate(Context context); }
表达式:
public class WordExpression : BaseExpression { static Dictionary<string, string> DictionaryExpression = new Dictionary<string, string>(); public WordExpression() { DictionaryExpression.Add("a", "A"); DictionaryExpression.Add("b", "B"); DictionaryExpression.Add("c", "C"); DictionaryExpression.Add("d", "D"); DictionaryExpression.Add("e", "E"); DictionaryExpression.Add("f", "F"); DictionaryExpression.Add("g", "G"); DictionaryExpression.Add("h", "H"); DictionaryExpression.Add("i", "I"); DictionaryExpression.Add("j", "J"); DictionaryExpression.Add("k", "K"); DictionaryExpression.Add("l", "L"); DictionaryExpression.Add("m", "M"); DictionaryExpression.Add("n", "N"); DictionaryExpression.Add("o", "O"); DictionaryExpression.Add("p", "P"); DictionaryExpression.Add("q", "Q"); DictionaryExpression.Add("r", "R"); DictionaryExpression.Add("s", "S"); DictionaryExpression.Add("t", "T"); DictionaryExpression.Add("u", "U"); DictionaryExpression.Add("v", "V"); DictionaryExpression.Add("w", "W"); DictionaryExpression.Add("x", "X"); DictionaryExpression.Add("y", "Y"); DictionaryExpression.Add("z", "Z"); } public override void Translate(Context context) { List<string> SourceText = context.SourceText.ToCharArray().Select(w => w.ToString()).ToList(); List<string> ResultText = new List<string>(); foreach (string item in SourceText) { if (DictionaryExpression.ContainsKey(item)) { ResultText.Add(DictionaryExpression[item]); } else { ResultText.Add(item); } } context.SourceText = string.Concat(ResultText); } }
public class NumberExpression : BaseExpression { static Dictionary<string, string> DictionaryExpression = new Dictionary<string, string>(); public NumberExpression() { DictionaryExpression.Add("0", "零"); DictionaryExpression.Add("1", "一"); DictionaryExpression.Add("2", "二"); DictionaryExpression.Add("3", "三"); DictionaryExpression.Add("4", "四"); DictionaryExpression.Add("5", "五"); DictionaryExpression.Add("6", "六"); DictionaryExpression.Add("7", "七"); DictionaryExpression.Add("8", "八"); DictionaryExpression.Add("9", "九"); } public override void Translate(Context context) { List<string> SourceText = context.SourceText.ToCharArray().Select(w=>w.ToString()).ToList(); List<string> ResultText = new List<string>(); foreach (string item in SourceText) { if (DictionaryExpression.ContainsKey(item)) { ResultText.Add(DictionaryExpression[item]); } else { ResultText.Add(item); } } context.SourceText = string.Concat(ResultText); } }
上下文对象:
public class Context { public string SourceText { get; set; } public string ResultText { get { return SourceText; } } }
实际使用:
static void Main(string[] args) { while (true) { var ReadText = Console.ReadLine(); Context context = new Context(); context.SourceText = ReadText; List<BaseExpression> ExpressionList = new List<BaseExpression>(); ExpressionList.Add(new WordExpression()); ExpressionList.Add(new NumberExpression()); foreach (var item in ExpressionList) { item.Translate(context); } Console.WriteLine("输入字符:{0},翻译字符:{1}", ReadText, context.ResultText); } }
运行结果:
以上是关于解释器模式的主要内容,如果未能解决你的问题,请参考以下文章