zoukankan      html  css  js  c++  java
  • C#设计模式:解释器模式(Interpreter Pattern)

    一,C#设计模式:解释器模式(Interpreter Pattern)

    1,解释器模式的应用场合是Interpreter模式应用中的难点,只有满足“业务规则频繁变化,且类似的模式不断重复出现,并且容易抽象为语法规则的问题”才适合使用解释器模式
    2,解释器设计模式每个解释的类有自己的规则,并且与其他业务规则不冲突

    二,如下代码

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace _23.解释器模式
    {
        /// <summary>
        /// Interpreter模式的应用场合是Interpreter模式应用中的难点,只有满足“业务规则频繁变化,且类似的模式不断重复出现,并且容易抽象为语法规则的问题”才适合使用Interpreter模式。
        ///  1、当一个语言需要解释执行,并可以将该语言中的句子表示为一个抽象语法树的时候,可以考虑使用解释器模式(如XML文档解释、正则表达式等领域)
        ///  2、一些重复出现的问题可以用一种简单的语言来进行表达。
        ///  3、一个语言的文法较为简单.
        ///  4、当执行效率不是关键和主要关心的问题时可考虑解释器模式(注:高效的解释器通常不是通过直接解释抽象语法树来实现的,而是需要将它们转换成其他形式,使用解释器模式的执行效率并不高。)
        /// </summary>
        class Program
        {
            static void Main(string[] args)
            {
                Context context = new Context("usachi");
                List<PeopleInterpreter> interpreterList = new List<PeopleInterpreter>()
                        {
                            new Chinese(),
                            new Usa(),
                        };
                foreach (var item in interpreterList)
                {
                    item.Conversion(context);
                }
                Console.WriteLine(context.Get());
            }
        }
    
        /// <summary>
        /// 上下文
        /// </summary>
        public class Context
        {
            private string _Word = null;
            public Context(string word)
            {
                this._Word = word;
            }
    
            public void Set(string newWord)
            {
                this._Word = newWord;
            }
    
            public string Get()
            {
                return this._Word;
            }
        }
    
        /// <summary>
        /// 抽象解释器
        /// </summary>
        public abstract class PeopleInterpreter
        {
            public abstract void Conversion(Context context);
        }
        /// <summary>
        /// 中国人业务
        /// </summary>
        public class Chinese : PeopleInterpreter
        {
            private static Dictionary<char, string> _Dictionary = new Dictionary<char, string>();
            /// <summary>
            /// 中国人自己解释规则
            /// </summary>
            static Chinese()
            {
                _Dictionary.Add('c', "中国人");
                _Dictionary.Add('h', "");
                _Dictionary.Add('i', "筷子吃饭");
            }
            /// <summary>
            /// 中国人解释输入的文案
            /// 然后返回解释的文案
            /// </summary>
            /// <param name="context"></param>
            public override void Conversion(Context context)
            {
                Console.WriteLine(this.GetType().ToString() + "业务");
                string text = context.Get();
                if (string.IsNullOrEmpty(text))
                    return;
                List<string> numberList = new List<string>();
                foreach (var item in text.ToLower().ToArray())
                {
                    if (_Dictionary.ContainsKey(item))
                    {
                        numberList.Add(_Dictionary[item]);
                    }
                    else
                    {
                        numberList.Add(item.ToString());
                    }
                }
                context.Set(string.Concat(numberList));
            }
        }
        /// <summary>
        /// 美国人业务
        /// </summary>
        public class Usa : PeopleInterpreter
        {
            private static Dictionary<char, string> _Dictionary = new Dictionary<char, string>();
            /// <summary>
            /// 美国人自己解释规则
            /// </summary>
            static Usa()
            {
                _Dictionary.Add('u', "美国人");
                _Dictionary.Add('s', "用刀叉");
                _Dictionary.Add('a', "吃饭,");
            }
    
            /// <summary>
            /// 美国人解释输入的文案
            /// 然后返回解释的文案
            /// </summary>
            /// <param name="context"></param>
            public override void Conversion(Context context)
            {
                Console.WriteLine(this.GetType().ToString() + "业务");
                string text = context.Get();
                if (string.IsNullOrEmpty(text))
                    return;
                List<string> numberList = new List<string>();
                foreach (var item in text.ToLower().ToArray())
                {
                    if (_Dictionary.ContainsKey(item))
                    {
                        numberList.Add(_Dictionary[item]);
                    }
                    else
                    {
                        numberList.Add(item.ToString());
                    }
                }
                context.Set(string.Concat(numberList));
            }
        }
    }
  • 相关阅读:
    TOMCAT添加管理用户认证
    NGINX配置详解及应用
    Zabbix部署
    NGINX+TOMCAT实现反向代理
    数据库-高级部分
    数据库-用户管理与pymysql
    数据库-表操作(CRUD)
    数据库-表关系练习
    数据库-表关系
    数据库-基础概念
  • 原文地址:https://www.cnblogs.com/May-day/p/11718888.html
Copyright © 2011-2022 走看看