zoukankan      html  css  js  c++  java
  • 设计模式(十七):解释器模式

    优点:

      ① 如果一个特定问题发生频率够高,就值得将其实例表述(解释为)为一个简单语言的句子,如用正则表达式匹配手机号,油箱等

      ② 必须已有一种语言,之后,先定义其文法表示,然后定义其解释器,用解释器来解释此语言中的句子

    缺点:

      ① 此模式为文法中的每一条规则至少定义了一个类,因此包含了许多规则的文法可能难以管理和维护。

    适用范围:

       特定类型的问题发生的频率足够高,就可以考虑将其表述为一个简单语言句子

    客户端:

      Content text = new Content();

      //音乐-上海滩
      System.out.println("上海滩:");

      //待解释的音符串
      text.setText("T 500 O 2 E 0.5 G 0.5 A 3 E 0.5 G 0.5 D 3 E 0.5 G 0.5 A 0.5 O 3 C 1 O 2 A 0.5 G 1 C 0.5 E 0.5 D 3 ");

      //抽象解释器接口

      AbstractExpression expression = null;

      try {
        while(text.getText().length()>0){
          String str = text.getText().substring(0,1); 
          switch (str){
            //演奏速度
            case "T":
              expression = new TerminalExpression3();
              break;
            //音阶
            case "O":
              expression = new TerminalExpression2();
              break;
            //音符
            case "A":
            case "B":
            case "C":
            case "D":
            case "E":
            case "F":
            case "G":
              expression = new TerminalExpression1();
              break;
          }

          // 解释,每次截取一个字母+数值(即标识+值),不断循环截取解释
          expression.interpret(text);
        }
       } catch (Exception e) {
        e.printStackTrace();
       }

       //打印结果:

       上海滩:

       中速 中音 5 7 1 5 7 4 5 7 1 高音 3 中音 1 7 3 5 4

            /**
             * AbstractExpression 抽象表达式类 (抽象解释类)  -- 获取标识和值,及解释的方法,由实例化对其进行具体解释
             * TerminalExpression1 TerminalExpression2 TerminalExpression3 (音符、音阶、演奏速度)  NoTerminalExpression(其他)  -- 都是AbstractExpression的实例化  
             * Content 演奏内容  -- 标识和值的集合
             */
  • 相关阅读:
    27. Remove Element
    26. Remove Duplicates from Sorted Array
    643. Maximum Average Subarray I
    674. Longest Continuous Increasing Subsequence
    1. Two Sum
    217. Contains Duplicate
    448. Find All Numbers Disappeared in an Array
    566. Reshape the Matrix
    628. Maximum Product of Three Numbers
    UVa 1349 Optimal Bus Route Design (最佳完美匹配)
  • 原文地址:https://www.cnblogs.com/shushengyou/p/10298686.html
Copyright © 2011-2022 走看看