设计模式-解释器模式-创新互联-成都快上网建站

设计模式-解释器模式-创新互联

场景:大小写数字互相转换

我们提供的服务有:网站制作、网站建设、微信公众号开发、网站优化、网站认证、广安ssl等。为成百上千家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的广安网站制作公司
abstract class Expresstion
    {
            //解释器
        public void Interpret(PlayContext context)
        {
            string value = context.PlayText.Substring(0,1);
            Translate(value);//处理当前字符
            context.PlayText = context.PlayText.Substring(1);  //去除已处理的字符
        }
        public abstract void Translate(string key);
    }
    class Upper : Expresstion
    {
        public override void Translate(string key)
        {
            string upper = "";
            switch (key)
            {
                case "1":upper = "一";break;
                case "2": upper = "二"; break;
                case "3": upper = "三"; break;
                case "4": upper = "四"; break;
                case "5": upper = "五"; break;
                case "6": upper = "六"; break;
                case "7": upper = "七"; break;
                case "8": upper = "八"; break;
                case "9": upper = "九"; break;
                case "0": upper = "零"; break;
            }
            Console.Write(upper);
        }
    }
    class Lower : Expresstion
    {
        public override void Translate(string key)
        {
            string lower = "";
            switch (key)
            {
                case "一": lower = "1"; break;
                case "二": lower = "2"; break;
                case "三": lower = "3"; break;
                case "四": lower = "4"; break;
                case "五": lower = "5"; break;
                case "六": lower = "6"; break;
                case "七": lower = "7"; break;
                case "八": lower = "8"; break;
                case "九": lower = "9"; break;
                case "零": lower = "0"; break;
            }
            Console.Write(lower);
        }
    }
    //上下文
    class PlayContext
    {
        private string playText;
        public string PlayText
        {
            get
            {
                return playText;
            }
            set
            {
                playText = value;
                if (value.Length > 0)
                {
                    Expresstion expresstion = null;
                    string values = playText.Substring(0, 1);
                    switch (values)
                    {
                        case "1":
                        case "2":
                        case "3":
                        case "4":
                        case "5":
                        case "6":
                        case "7":
                        case "8":
                        case "9":
                        case "0": expresstion = new Upper(); break;
                        case "一":
                        case "二":
                        case "三":
                        case "四":
                        case "五":
                        case "六":
                        case "七":
                        case "八":
                        case "九":
                        case "零": expresstion = new Lower(); break;
                    }
                    expresstion.Interpret(this);
                }                
            }
        }
    }
        //前端
        static void Main(string[] args)
        {
            PlayContext playContext = new PlayContext();
            playContext.PlayText = "123四五六7八9零";           
            Console.ReadLine();
        }

总结:设定规则将当前语法转变成另外一种语言。当一个语言需要解释执行,并且可将该语言中的句子表示为抽象语法树的时候,可使用该模式。
好处:容易扩展文法规则,并且各个节点的规则类很容易编写。
缺点:用了递归,效率要差、使用场景不多、规则多的时候难维护。

设计模式-解释器模式

创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。


分享名称:设计模式-解释器模式-创新互联
转载源于:http://kswjz.com/article/dieoeh.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流