设计模式行为型之解释器模式

解释器模式提供了评估语言的语法或表达式的方式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被广泛地应用在 SQL 解析、符号处理引擎等领域。解释器模式在实际的应用开发中运用的场景是比较少的,这里通过一个的例子简单用代码实现一下解释器模式。

/// <summary>
    /// 定义上下文 用于存储待解释对象
    /// </summary>
    public class StringContext
    {
        private string word;
        public StringContext(string word)
        {
            this.word = word;
        }

        public void Set(List<string> newWord)
        {
            string conten = "";
            foreach (string s in newWord)
            {
                conten += s;
            }
            this.word = conten;
        }

        public string Get()
        {
            return word;
        }

 

    /// <summary>
    /// 定义一个解释器抽象父类
    /// </summary>
    public abstract class BaseInterpreter
    {
        
        /// <summary>
        /// 定义一个转化方法
        /// </summary>
        public abstract void Conversion(StringContext content);
    }
    /// <summary>
    /// 定义上下文 用于存储待解释对象
    /// </summary>
    public class StringContext
    {
        private string word;
        public StringContext(string word)
        {
            this.word = word;
        }

        public void Set(List<string> newWord)
        {
            string conten = "";
            foreach (string s in newWord)
            {
                conten += s;
            }
            this.word = conten;
        }

        public string Get()
        {
            return word;
        }

上层调用如下

class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("========================================");


            //要转化的上下文对象
            StringContext content = new StringContext("20200831");
            //解释器
            BaseInterpreter bases = new Numberlnterpreter();

            bases.Conversion(content);
           
            Console.WriteLine(content.Get());

            Console.ReadKey();
        }
    }

运行结果如下:

 

一个简单 解释器就实现了,我们可以将数字123456789转化为对应的大写模式。像这样给定一个语言,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。当有一个语言需要解释执行,并且你可将该语言中的句子表示为一个抽象的语法树时,可以考虑使用解释器模式。

posted @ 2020-08-31 23:31  一叶青城  阅读(73)  评论(0编辑  收藏  举报