JavaScript设计模式样例二十一 —— 解释器模式

解释器模式(Interpreter Pattern)

定义:提供了评估语言的语法或表达式的方式。
目的:对于一些固定文法构建一个解释句子的解释器。
场景:编译器、运算表达式计算。
// 定义对于语法的断言
class TerminalExpression {
    constructor (data) {
        this.data = data
    }

    interpret (context) {
        if (context.indexOf(this.data) > -1) {
            return true
        }
        return false
    }
}

// 添加表达式判断符
class OrExpression {
    constructor(expr1, expr2) {
        this.expr1 = expr1;
        this.expr2 = expr2;
    }
    interpret(context) {
        return this.expr1.interpret(context) || this.expr2.interpret(context);
    }
}
class AndExpression {
    constructor(expr1, expr2) {
        this.expr1 = expr1;
        this.expr2 = expr2;
    }
    interpret(context) {
        return this.expr1.interpret(context) && this.expr2.interpret(context);
    }
}


// 获取对应表达式
function getMaleExpression(){
    const robert = new TerminalExpression("Robert");
    const john = new TerminalExpression("John");
    return new OrExpression(robert, john);
}
function getMarriedWomanExpression(){
    const julie = new TerminalExpression("Julie");
    const married = new TerminalExpression("Married");
    return new AndExpression(julie, married);
}


// 判断语句断言
const isMale = getMaleExpression();
const isMarriedWoman = getMarriedWomanExpression();
console.log("John is male? " + isMale.interpret("John"));
console.log("Julie is a married women? " )

Git地址:https://github.com/skillnull/Design-Mode-Example

posted @   SKILL·NULL  阅读(208)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示