GOF23之解释器模式

一、核心作用:

给定一个语言,定义他的文本表示方式,定义一个解释器,解释器使用表示解释语言的句子

二、常见应用场景:

1、正则表达式
2、运算符表达式

三、解释器模式的实现:

环境角色(Context):包含解释器之外的全局信息
抽象表达式(AbstractExpression):声明抽象解释操作
真实表达式(ContreteExpression):实现抽象表达式的操作

在这里插入图片描述

四、代码示例:

一、环境角色:
package com.hezeu.Interpreter;

/**
* @Classname Context
* @Description 环境角色
* @Date 2020/2/26 下午 05:52
* @Created by 朱进博 1724282894@qq.com
*/
public class Context {
        private String input;
        private String output;

        public String getInput() {
                return input;
        }

        public void setInput(String input) {
                this.input = input;
        }

        public String getOutput() {
                return output;
        }

        public void setOutput(String output) {
                this.output = output;
        }
}

#####二、抽象表达式:

package com.hezeu.Interpreter;

/**
* @Classname AbstractExpression
* @Description 具体命令类
* @Date 2020/2/26 下午 05:53
* @Created by 朱进博 1724282894@qq.com
*/
public abstract class AbstractExpression {
        public abstract void Interpret(Context context);
}
三、具体抽象类:
package com.hezeu.command;

/**
* @Classname Invoke
* @Description 调用者
* @Date 2020/2/26 下午 01:19
* @Created by 朱进博 1724282894@qq.com
*/
public class Invoke {
        private Command command;

        public Invoke(Command command) {
                this.command = command;
        }

        public void call(){
                command.execute();
        }
}
四、Receiver接收者类类
package com.hezeu.iterator;

import java.util.ArrayList;
import java.util.List;

/**
* @Classname ConcreteAggregate
* @Description TODO
* @Date 2020/2/25 下午 07:34
* @Created by 朱进博 1724282894@qq.com
*/
public class ConcreteAggregate implements Aggregate{
        private List<Object> list = new ArrayList<>();

        public void addObject(Object obj) {
                this.list.add(obj);
        }

        public void removeObject(Object obj) {
                this.list.remove(obj);
        }

        public List<Object> getList() {
                return list;
        }

        public void setList(List<Object> list) {
                this.list = list;
        }

        public MyInteger createIterator() {
                return new ConcreteIterator(list);
        }
}

五、解释器模式的优缺点:

优点: 有较强的扩展性

缺点: 解释器模式会引起类膨胀 解释器模式采用递归调用方法,将导致调试复杂 效率低

感谢阅读,水平有限,如有错漏,还请不吝赐教
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值