GOF23之解釋器模式

一、核心作用:

給定一個語言,定義他的文本表示方式,定義一個解釋器,解釋器使用表示解釋語言的句子

二、常見應用場景:

1、正則表達式
2、運算符表達式

三、解釋器模式的實現:

環境角色(Context):包含解釋器之外的全局信息
抽象表達式(AbstractExpression):聲明抽象解釋操作
真實表達式(ContreteExpression):實現抽象表達式的操作

在這裏插入圖片描述

四、代碼示例:

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

/**
* @Classname Context
* @Description 環境角色
* @Date 2020/2/26 下午 05:52
* @Created by 朱進博 [email protected]
*/
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 朱進博 [email protected]
*/
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 朱進博 [email protected]
*/
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 朱進博 [email protected]
*/
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);
        }
}

五、解釋器模式的優缺點:

優點: 有較強的擴展性

缺點: 解釋器模式會引起類膨脹 解釋器模式採用遞歸調用方法,將導致調試複雜 效率低

感謝閱讀,水平有限,如有錯漏,還請不吝賜教

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章