我学会了,解释器模式

简介: 解释器模式属于行为型模式,这个类型的设计模式总结出了 类、对象之间的经典交互方式,将类、对象的行为和使用解耦了,花式的去使用对象的行为来完成特定场景下的功能。

前言

解释器模式属于行为型模式,这个类型的设计模式总结出了 类、对象之间的经典交互方式,将类、对象的行为和使用解耦了,花式的去使用对象的行为来完成特定场景下的功能。

解释器模式

使用场景:当需要自定义规则,并且支持自己解释这些规则时,可以使用这个设计模式,比如JS 解释器,先定义好了语法,你按照语法来写代码,然后通过解释器来运行这些代码,最终拿到结果。

理解:这是一种类、对象之间的经典交互方式,将类、对象的行为和使用解耦了。解释器用于自定义语言规则的场景,类似于计算器、翻译器、编译器等等。这种设计模式,一般偏向底层的开发场景,例如编译原理,只做了解即可,不过蛮好玩。

namespace action_mode_10 {

    interface IExpression {

        interpret(context: Context): void

    }

    class Context {

        private instructions: string = ''
        private list: Array<IExpression> = new Array()

        constructor(instructions: string) {
            this.instructions = instructions
        }

        set(instructions: string) {
            this.instructions = instructions
        }

        get(): string {
            return this.instructions
        }

        pushExperssion (expression: IExpression) {
            this.list.push(expression)
        }

        getList() {
            return this.list
        }

    }

    // 解释器1:非终结表达式类
    class NonterminalExpression implements IExpression {

        private map: Map<string, string> = new Map()

        constructor(map: Map<string, string>) {
            this.map = map
        }

        interpret(context: Context): void {
            const instructions = context.get()
            let newInstructions = ''
            let result = ''

            for (const text of instructions) {
                if (this.map.has(text)) {
                    result += this.map.get(text)
                    // console.log(`解释:${text} 答案为:${this.map.get(text)}`)
                } else {
                    newInstructions += text
                }
            }

            context.set(newInstructions)
            if (result) {
                console.log(`解释器解释完毕:答案为:${result}`)
            }
        }
    }

    // 解释器2:终结表达式类
    class TerminalExpression implements IExpression {

        private startflag: string
        private endflag: string

        constructor(startflag: string, endFlag: string) {
            this.startflag = startflag
            this.endflag = endFlag
        }

        interpret(context: Context): void {
            const instructions = context.get()

            const startIndex = instructions.indexOf(this.startflag)
            const startLength = this.startflag.length
            const endIndex = instructions.indexOf(this.endflag)
            const endLength = this.endflag.length

            let newInstructions = ''

            if (startIndex !== -1 && endIndex !== -1) {
                newInstructions = instructions.slice(startIndex + startLength, endIndex + endLength)
            } if (startIndex === -1 && endIndex !== -1) {
                newInstructions = instructions.slice(0, endIndex + endLength)
            } else if (startIndex !== -1 && endIndex === -1) {
                newInstructions = instructions.slice(startIndex + startLength)
            } else {
                newInstructions = instructions
            }

            context.set(newInstructions)
        }

    }

    // 使用1
    const context = new Context('$wwssaaddABABAABBBBAAq')
    const terminalExpression = new TerminalExpression('$', 'q')
    const map1 = new Map()
    .set('w', '上').set('s', '下')
    .set('a', '左').set('d', '右')
    .set('A', '攻击').set('B', '防御')
    const nonterminalExpression = new NonterminalExpression(map1)

    context.pushExperssion(terminalExpression)
    context.pushExperssion(nonterminalExpression)
    context.getList().forEach(expression => {
        expression.interpret(context)
    })

    // 再来一把
    context.set('$wsadABsdwaBAAAAAAAAAABBBBBBBBBB')
    context.getList().forEach(expression => {
        expression.interpret(context)
    })

}
目录
相关文章
|
5天前
|
SQL 设计模式 C#
解释器模式
解释器模式是一种行为型设计模式,用于定义语言的文法表示并提供解释器处理语句或表达式。它将语法规则与解释逻辑分离,便于扩展和维护。适用于简单的语法规则、固定文法结构及重复使用的语法解释场景,如数学表达式求值、SQL解析和简单脚本语言。优点包括易于扩展新规则和分离语法逻辑,但复杂文法会导致类数量激增,维护困难。
20 2
|
3月前
|
设计模式 存储 缓存
Java设计模式 - 解释器模式(24)
Java设计模式 - 解释器模式(24)
|
7月前
|
设计模式 监控 Java
聊聊Java设计模式-解释器模式
解释器模式(Interpreter Design Pattern)指给定一个“语言”,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。这里所指的“语言”是指使用规定格式和语法的代码。
88 4
聊聊Java设计模式-解释器模式
|
7月前
|
设计模式
【设计模式】解释器模式
【设计模式】解释器模式
|
7月前
|
设计模式 存储 前端开发
【设计模式】之解释器模式
解释器模式是一种用于解释特定语言或规则的表达式的行为设计模式。在前端开发中,解释器模式可以用于处理复杂的逻辑或规则,并将其转化为可执行的代码。它具有灵活性和可扩展性的优点,但也存在复杂性和性能问题的缺点。通过合理地应用解释器模式,可以提高代码的可读性和可维护性,实现更灵活和可扩展的功能。
79 1
|
7月前
|
设计模式 SQL 自然语言处理
行为型 解释器模式
行为型 解释器模式
48 0
|
设计模式 SQL Java
设计模式~解释器模式(Interpreter)-19
解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等。 目录 (1)优点: (2)缺点: (3)使用场景: (4)注意事项: (5)应用实例: 代码
73 0
|
设计模式 消息中间件 Java
一起来学设计模式之解释器模式
前言 目前正在出一个设计模式专题系列教程, 篇幅会较多, 喜欢的话,给个关注❤️ ~ 本节给大家讲一下设计模式中的解释器模式,并结合实际业务场景给大家讲解如何使用~ 本专题的所有案例代码主要以Java语言为主, 好了, 废话不多说直接开整吧~ 解释器模式 解释器模式(Interpreter Pattern)是一种行为型设计模式,它定义了一种语言的语法表示,并定义了一个解释器来解释这种语言中的表达式。通过使用解释器模式,可以轻松地扩展和修改语言的语法,从而使其更加灵活。
|
设计模式 Java
Java设计模式 ->解释器模式
Java设计模式 ->解释器模式
90 0
中介者模式与解释器模式(1)
中介者模式与解释器模式(1)
136 0
中介者模式与解释器模式(1)
下一篇
DataWorks