23种设计模式----解释器模式(Interpreter Pattern)

在软件构建过程中,如果某一特定领域的问题比较复杂,类似的模式不断重复出现,如果使用普通的编程方式来实现将面临非常频繁的变化。在这种情况下,将特定领域的问题表达为某种语法规则下的句子,然后构建一个解释器来解释这样的句子,从而达到解决问题的目的。

interface IExpression
{
    void Interpret(StringBuilder sb);
}

public class WordExpression : IExpression
{
    public string Value { get; set; }
    public WordExpression(string _value)
    {
        this.Value = _value;
    }

    public void Interpret(StringBuilder sb)
    {
        sb.Append(ChineseEnglishDict.GetEnlish(Value.ToLower()));
    }
}

public class SymbolExpression : IExpression
{
    public string Value { get; set; }
    public SymbolExpression(string value)
    {
        this.Value = value;
    }

    public void Interpret(StringBuilder sb)
    {
        switch (Value)
        {
            case ".":
                sb.Append("。");
                break;
        }
    }
}

public static class Translator
{
    public static string Translate(string scentense)
    {
        StringBuilder sb = new StringBuilder();
        List<IExpression> list = new List<IExpression>();
        string[] elements = scentense.Split(new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries);
        foreach (string item in elements)
        {
            string[] words = item.Split(new char[] {' '}, StringSplitOptions.RemoveEmptyEntries);
            foreach (string w in words)
            {
                list.Add(new WordExpression(w));
            }
            list.Add(new SymbolExpression("."));
        }

        foreach (IExpression ie in list)
        {
            ie.Interpret(sb);
        }

        return sb.ToString();
    }
}

class Program
{
    static void Main(string[] args)
    {
        string englist = "This is an apple.";
        string chinese = Translator.Translate(englist);
        Console.WriteLine(chinese);
        Console.Read();
    }
}

优点:
解释器模式的优点
易于改变和扩展文法。
易于实现文法。
增加了新的解释表达式的方式。
缺点:
对于复杂文法难以维护。
执行效率较低。
应用场景很有限。

适用环境:
在以下情况下可以使用解释器模式:
可以将一个需要解释执行的语言中的句子表示为一个抽象语法树。
一些重复出现的问题可以用一种简单的语言来进行表达。
文法较为简单。
效率不是关键问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值