• C# 设计模式 行为型模式 之 解释器模式


    解释器模式 提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。

    总结:提供抽象 表达式 并提供参数,实现类 传参 然后比较 表达式 提供的 参数

    场景:运算表达式计算。

    优点: 1、可扩展性比较好,灵活。 2、增加了新的解释表达式的方式。 3、易于实现简单文法

    下面 使用 简单例子 描述 解释器模式:

    1. namespace 解释器模式
    2. {
    3. internal class Program
    4. {
    5. static void Main(string[] args)
    6. {
    7. AndExpression andExpression = new AndExpression(new TerminalExpression("张三"), new TerminalExpression("张三"));
    8. bool result= andExpression.Interpret("张三");
    9. Console.WriteLine("比较结果返回:" + result);
    10. /*
    11. * 控制台 : 比较结果返回:True
    12. */
    13. }
    14. }
    15. //表达
    16. public interface Expression
    17. {
    18. bool Interpret(string context);
    19. }
    20. //比较模板
    21. public class TerminalExpression : Expression
    22. {
    23. private string data;
    24. public TerminalExpression(string data)
    25. {
    26. this.data = data;
    27. }
    28. public bool Interpret(string context)
    29. {
    30. if(data == context)
    31. {
    32. return true;
    33. }
    34. return false;
    35. }
    36. }
    37. //使用TerminalExpression模板 进行&&比较 解释表达式
    38. public class AndExpression : Expression
    39. {
    40. Expression expression1 = null;
    41. Expression expression2 = null;
    42. public AndExpression(Expression expression1, Expression expression2)
    43. {
    44. this.expression1 = expression1;
    45. this.expression2 = expression2;
    46. }
    47. public bool Interpret(string context)
    48. {
    49. return expression1.Interpret(context) && expression2.Interpret(context);
    50. }
    51. }
    52. }

    缺点: 1、可利用场景比较少。 2、对于复杂的文法比较难维护。 3、解释器模式会引起类膨胀。 

  • 相关阅读:
    数据库 SQL高级查询语句:聚合查询,多表查询,连接查询
    用postman 推送消息到GCP的pubsub
    nodejs 入门基本操作
    centos的root密码忘记或失效的解决办法
    9.WPF资源
    Mysql——压缩包方式安装教程
    多线程和多进程的区别与联系
    微软 AutoML 框架之 FLAML | 论文解读
    使用node-pty报错Uncaught Error: This socket has been ended by the other party
    提取Canny边缘
  • 原文地址:https://blog.csdn.net/q8812345qaz/article/details/127602972