美文网首页Android设计模式
Interpreter 解释器模式

Interpreter 解释器模式

作者: Charles1993 | 来源:发表于2019-12-07 19:31 被阅读0次

    设计原则学习笔记
    设计模式学习笔记

    作用

    将表达式转化为操作,并且将其拆成最小的单元

    类图

    解释器模式

    Java实现

    // 构建表达式类
    public class Context {
        public char[] chars;
    }
    // 定义Expression接口
    public interface Expression {
        int interpret(Context context);
    }
    // 定义TerminalExpression对Context的最小单元进行解释
    public class TerminalExpression implements Expression {
        @Override
        public int interpret(Context context) {
            if (context.chars[0] == '$') {
                return 1;
            }
            return 0;
        }
    }
    // 定义NonterminalExpression用于拆分表达式
    public class NonterminalExpression implements Expression {
        @Override
        public int interpret(Context context) {
            if (context.chars.length == 1) {
                return new TerminalExpression().interpret(context);
            }
    
            Context context1 = new Context();
            context1.chars = new char[] {context.chars[0]};
    
            Context context2 = new Context();
            int length = context.chars.length - 1;
            context2.chars = new char[length];
            System.arraycopy(context.chars, 1, context2.chars, 0, length);
    
            return new TerminalExpression().interpret(context1) + new NonterminalExpression().interpret(context2);
        }
    }
    // 客户端
    public class Client {
        public static final void main(String[] args) {
            Context context = new Context();
            context.chars = "@#$%^&%$#W@#$%^".toCharArray();
            System.out.println(new NonterminalExpression().interpret(context));
        }
    }
    

    上面的代码对表达式(字符数组)进行解释(统计里面的字符'$'的数量)

    Android源码中的应用

    • 正则表达式

    相关文章

      网友评论

        本文标题:Interpreter 解释器模式

        本文链接:https://www.haomeiwen.com/subject/ykaugctx.html