• 设计模式-解释器模式


            解释器模式是一种行为设计模式,它用于解释和执行特定语言的语法或表达式。该模式将语法规则表示为一个类层次结构,并使用解释器对象来解释和执行这些语法规则。

            在Java中实现解释器模式通常需要以下几个关键组件:

            1. 抽象表达式(Abstract Expression):它是一个抽象类或接口,定义了解释器的抽象操作。通常会有多个具体表达式类继承或实现它。

            2. 终结符表达式(Terminal Expression):它是抽象表达式的子类,表示语法规则中的终结符,即不再可以进一步解释的最小单元。

            3. 非终结符表达式(Non-terminal Expression):它是抽象表达式的子类,表示语法规则中的非终结符,即可以进一步解释的复合单元。

            4. 上下文(Context):它包含解释器需要的全局信息或状态。

            下面是一个简单的Java代码示例,演示了如何实现解释器模式:

     

    1. // 抽象表达式
    2. interface Expression {
    3. boolean interpret(String context);
    4. }
    5. // 终结符表达式
    6. class TerminalExpression implements Expression {
    7. private String data;
    8. public TerminalExpression(String data) {
    9. this.data = data;
    10. }
    11. public boolean interpret(String context) {
    12. return context.contains(data);
    13. }
    14. }
    15. // 非终结符表达式
    16. class OrExpression implements Expression {
    17. private Expression expr1;
    18. private Expression expr2;
    19. public OrExpression(Expression expr1, Expression expr2) {
    20. this.expr1 = expr1;
    21. this.expr2 = expr2;
    22. }
    23. public boolean interpret(String context) {
    24. return expr1.interpret(context) || expr2.interpret(context);
    25. }
    26. }
    27. // 上下文
    28. class Context {
    29. private String input;
    30. public Context(String input) {
    31. this.input = input;
    32. }
    33. public String getInput() {
    34. return input;
    35. }
    36. }
    37. // Usage
    38. public class Main {
    39. public static void main(String[] args) {
    40. Expression john = new TerminalExpression("John");
    41. Expression married = new TerminalExpression("married");
    42. Expression marriedJohn = new AndExpression(john, married);
    43. Context context1 = new Context("John is married");
    44. System.out.println(marriedJohn.interpret(context1.getInput())); // Output: true
    45. Context context2 = new Context("Alice is single");
    46. System.out.println(marriedJohn.interpret(context2.getInput())); // Output: false
    47. }
    48. }

            在这个示例中,我们定义了一个简单的语法规则,用于判断一个人是否是已婚的约翰(John)。我们使用了终结符表达式(TerminalExpression)和非终结符表达式(Non-terminalExpression)来表示语法规则,并使用上下文(Context)来传递输入。

  • 相关阅读:
    <C++>初始化列表_static成员_友元
    预防Dos攻击
    主频计算-架构真题(二十三)
    Flask框架创建项目初期总结
    java 企业工程管理系统软件源码 自主研发 工程行业适用
    2023_Spark_实验十八:安装FinalShell
    Prometheus - 系统监控与警报管理
    数据结构和算法之图的遍历
    49、C++/友元、常成员函数和常对象、运算符重载学习20240314
    Windows 11 现已正式推出!
  • 原文地址:https://blog.csdn.net/m0_65014849/article/details/133984515