解释器模式

概述

解释器模式是类的行为模式。给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器。客户端可以使用这个解释器来解释这个语言中的句子。

核心

概念: 定义一个语言的文法,并且建立一个解释器来解释该语言中的句子,这里的“语言”是指使用规定格式和语法的代码。解释器模式是一种类行为型模式。

解释器模式结构重要核心模块:

抽象表达式(Expression)

声明一个所有的具体表达式角色都需要实现的抽象类。这个类主要有一个Explain()方法,称做解释操作。

实现抽象类

根据场景的需求,实现相应的代码.

使用场景

有一个简单的语法规则,比如编码转换.

一些重复发生的问题.

程序猿实例

说明:

将字符变为指定的编.

abcdefghi     jklmn          ……-->对应
123456789 abcde         0000

    public abstract class InterperterBase
    {//抽象类
        public abstract string Explain(string str);
    }
    public class InterperterAtoI : InterperterBase
    {//第一种编码转换的实现
        public override string Explain(string str)
        {
            string temp = "";
            if (str == "")
            {
                return temp;
            }
            List<string> numlist = new List<string>();
            foreach ( char  item in str.ToLower ().ToArray ())
            {
                switch (item)
                {
                    case 'a':
                        numlist.Add("1");
                        break;
                    case 'b':
                        numlist.Add("2");
                        break;
                    case 'c':
                        numlist.Add("3");
                        break;
                    case 'd':
                        numlist.Add("4");
                        break;
                    case 'e':
                        numlist.Add("5");
                        break;
                    case 'f':
                        numlist.Add("6");
                        break;
                    case 'g':
                        numlist.Add("7");
                        break;
                    case 'h':
                        numlist.Add("8");
                        break;
                    case 'i':
                        numlist.Add("9");
                        break;
                    default:
                        numlist.Add(item.ToString());
                        break;
                }
            }
            numlist.ForEach(a => temp += a);
            return temp;
        }
    }
    public class InterperterJtoN : InterperterBase
    {//第二种方法的实现
        public override string Explain(string str)
        {
            string temp = "";
            if (str == "")
            {
                return temp;
            }
            List<string> numlist = new List<string>();
            foreach (char item in str.ToLower().ToArray())
            {
                switch (item)
                {
                    case 'j':
                        numlist.Add("a");
                        break;
                    case 'k':
                        numlist.Add("b");
                        break;
                    case 'l':
                        numlist.Add("c");
                        break;
                    case 'm':
                        numlist.Add("d");
                        break;
                    case 'n':
                        numlist.Add("e");
                        break;
                    default:
                        numlist.Add(item.ToString());
                        break;
                }
            }
            numlist.ForEach(a => temp += a);
            return temp;
        }
    }
    public class InterperterEng : InterperterBase
    {//N种方法的实现
        public override string Explain(string str)
        {
            string temp = "";
            if (str == "")
            {
                return temp;
            }
            List<char > convertToNumber = new List<char>() { '1', '2', '3', '4', '5', '6','7', '8', '9'};
            List<string> numlist = new List<string>();
            str.ToLower().ToArray().ToList().ForEach(o =>
            {
                if (convertToNumber.Contains(o))
                {
                    numlist.Add(o.ToString());
                }
                else
                {
                    numlist.Add("0");
                }
            });
  
            numlist.ForEach(a => temp += a);
            return temp;
        }
    }

调用

            string cc = "AZJway";
            List<InterperterBase> convert = new List<InterperterBase>();
            convert.Add(new InterperterJtoN());
            convert.Add(new InterperterAtoI());
            convert.Add(new InterperterEng());
            //string temp = "";
            convert.ForEach((o) => { cc = o.Explain(cc); });

结果

“101010”



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值