您的位置:首页 > 编程语言 > C#

201802191355->深入浅出设计模式:c#解析器模式

2018-02-23 21:01 477 查看
using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace _014解释器模式

{

    /// <summary>

    /// 表

    /// </summary>

    public class TranslateDictionary

    {

        private static readonly Dictionary<string, string> TranslationDictionary = new Dictionary<string, string>()

        {

            { "hello","你好"},

            {"world","世界"},

        };

        public static string getChinese(string key)

        {

            if (TranslationDictionary.ContainsKey(key))

            {

                return TranslationDictionary[key];<
4000
br />
            }

            return string.Empty;

        }

    }

    /// <summary>

    /// 翻译接口

    /// </summary>

    public interface IExpressions

    {

        void Interpret(StringBuilder sb);

    }

    /// <summary>

    /// 文字翻译

    /// </summary>

    public class WordExpressions : IExpressions

    {

        private string Value;

        public WordExpressions(string value)

        {

            this.Value = value;

        }

        public void Interpret(StringBuilder sb)

        {

            sb.Append(TranslateDictionary.getChinese(Value));

        }

    }

    /// <summary>

    /// 符号翻译

    /// </summary>

    public class SymbolExpressions : IExpressions

    {

        private string Value;

        public SymbolExpressions(string value)

        {

            this.Value = value;

        }

        public void Interpret(StringBuilder sb)

        {

            switch (Value)

            {

                case ".":

                    sb.Append("。");

                    break;

                default:

                    sb.Append(string.Empty);

                    break;

            }

        }

    }

    /// <summary>

    ///  翻译工厂

    /// </summary>

    public class ExpressionsFactory

    {

        public static string GetChinese(string value)

        {

            StringBuilder builder = new StringBuilder();

            List<IExpressions> expressions = new List<IExpressions>();

            string[] elements = value.Split(new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries);

            foreach (var item in elements)

            {

                string[] element = item.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

                foreach (var e in element)

                {

                    expressions.Add(new WordExpressions(e.ToLower()));

                }

                expressions.Add(new SymbolExpressions("."));

            }

            foreach (var item in expressions)

            {

                item.Interpret(builder);

            }

            return builder.ToString();

        }

    }

    internal class Program

    {

        private static void Main(string[] args)

        {

            string str = "Hello World.";

            Console.WriteLine(ExpressionsFactory.GetChinese(str));

            /*

             *

             * 解释器模式

             *

             * 利用list接口的形式将一堆一堆的数据传入去

             *

             * 然后调用接口方法来解析数据

             *

             * 最后得到想要的结果

             *

             * 上边的例子是将一句string分割成一个list<iexpression>

             *

             * 然后利用iexpression下的解析的方法得到想要的翻译结果

             *

             */

            Console.ReadKey();

        }

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c# 心得 理解 笔记