• 北风设计模式课程---19、解释器模式


    北风设计模式课程---19、解释器模式

    一、总结

    一句话总结:

    不仅要通过视频学,还要看别的博客里面的介绍,搜讲解,搜作用,搜实例
    设计模式都是对生活的抽象,比如用户获得装备,我可以先装备工厂先生产出来装备,然后给宗门武器库,宗门武器库发给我,如果是打怪获得的装备,可以是装备工厂把装备给的怪物装备库

    1、什么是解释器模式?

    简单的语法解释器构架:Interpreter模式是一种简单的语法解释器构架

     Interpreter模式也叫解释器模式,是行为模式之一,它
    是一种特殊的设计模式,它建立一个解释器,对于特定
    的计算机程序设计语言,用来解释预先定义的文法。简
    单地说,Interpreter模式是一种简单的语法解释器构架。

    2、解释器模式应用场景?

    当有一个语言需要解释执行, 并且你可将该语言中的句子表示为一个抽象语法树时,可使用解释器模式。

    3、解释器模式的角色和职责?

    Context:解释器上下文环境类。用来存储解释器的上下文环境,比如需要解释的文法等:Context.java
    AbstractExpression:解释器抽象类:Expression.java
    ConcreteExpression:解释器具体实现类:MinusExpression.java、PlusExpression.java

    二、内容在总结中

    1、相关知识

    Context:解释器上下文环境类。用来存储解释器的上下文环境,比如需要解释的文法等:Context.java

    AbstractExpression:解释器抽象类:Expression.java

    ConcreteExpression:解释器具体实现类:MinusExpression.java、PlusExpression.java

     

    2、代码

    Context:解释器上下文环境类。用来存储解释器的上下文环境,比如需要解释的文法等:Context.java

    /*
     * 上下文环境类,用来保存文法
     */
    public class Context {
        
        private String input;
        private int output;
        
        public Context(String input) {
            this.input = input;
        }
        
        public String getInput() {
            return input;
        }
        public void setInput(String input) {
            this.input = input;
        }
        public int getOutput() {
            return output;
        }
        public void setOutput(int output) {
            this.output = output;
        }
    }

    AbstractExpression:解释器抽象类:Expression.java

    /*
     * 抽象解释器
     */
    public abstract class Expression {
        
        public abstract void interpret(Context context);
        
    }

    ConcreteExpression:解释器具体实现类:MinusExpression.java、PlusExpression.java

    MinusExpression.java

    public class MinusExpression extends Expression {
    
        public void interpret(Context context) {
            System.out.println("×Ô¶¯µÝ¼õ");
            String input = context.getInput();
            int inInput = Integer.parseInt(input);
    //        inInput--;
            --inInput;
            context.setInput(String.valueOf(inInput));
            context.setOutput(inInput);
        }
    
    }

    PlusExpression.java

    public class PlusExpression extends Expression {
    
        public void interpret(Context context) {
            //提示信息
            System.out.println("自动递增");
            //获得上下文环境
            String input = context.getInput();
            //进行类型转换
            int intInput = Integer.parseInt(input);
            //进行递增
    //        intInput++;
            ++intInput;
            //对上下文环境重新进行赋值
            context.setInput(String.valueOf(intInput));
            context.setOutput(intInput);
        }
    
    }

    客户端调用

    import java.util.ArrayList;
    import java.util.List;
    
    /*
     * client
     */
    public class MainClass {
        public static void main(String[] args) {
            String number = "20";
            Context context = new Context(number);
            
    //        Expression expression1 = new MinusExpression();
    //        expression1.interpret(context);
    //        System.out.println(context.getOutput());
    //        
    //        Expression expression2 = new PlusExpression();
    //        expression2.interpret(context);
    //        System.out.println(context.getOutput());
    //        
    //        Expression expression3 = new PlusExpression();
    //        expression3.interpret(context);
    //        System.out.println(context.getOutput());
    //        
    //        Expression expression4 = new PlusExpression();
    //        expression4.interpret(context);
    //        System.out.println(context.getOutput());
            
            List<Expression> list = new ArrayList<Expression>();
            list.add(new PlusExpression());
            list.add(new PlusExpression());
            list.add(new MinusExpression());
            list.add(new MinusExpression());
            list.add(new MinusExpression());
            list.add(new MinusExpression());
            
            for(Expression ex : list) {
                ex.interpret(context);
                System.out.println(context.getOutput());
            }
        }
    }
     
    我的旨在学过的东西不再忘记(主要使用艾宾浩斯遗忘曲线算法及其它智能学习复习算法)的偏公益性质的完全免费的编程视频学习网站: fanrenyi.com;有各种前端、后端、算法、大数据、人工智能等课程。
    博主25岁,前端后端算法大数据人工智能都有兴趣。
    大家有啥都可以加博主联系方式(qq404006308,微信fan404006308)互相交流。工作、生活、心境,可以互相启迪。
    聊技术,交朋友,修心境,qq404006308,微信fan404006308
    26岁,真心找女朋友,非诚勿扰,微信fan404006308,qq404006308
    人工智能群:939687837

    作者相关推荐

  • 相关阅读:
    自动化测试面试题及答案
    Jmeter读取CSV数据显示EOF问题
    C++中类继承public,protected和private关键字作用详解及派生类的访问权限
    汇编实验:寻址方式在数据访问中的应用
    集成运放综合应用的仿真模拟
    集成运算放大电路线性区运用的仿真实验
    共射/共源放大电路的仿真实验
    二极管特性的仿真实验
    各主流排序算法详细介绍(时间/空间复杂度,适用范围和稳定性)
    三大自由之二 部分
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/11033128.html
Copyright © 2020-2023  润新知