设计模式——解释器模式

2020-11-04  本文已影响0人  DevilRoshan

什么是解释器模式?

给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。

实现

// Context 环境角色
type Context struct {
}

func NewContext() *Context {
    return &Context{}
}

// 抽象表达式类
type Expression interface {
    Interpreter(ctx Context)
}

// 终端解析器
type TerminalExpression struct {
}

func NewTerminalExpression() *TerminalExpression {
    return &TerminalExpression{}
}

func (this *TerminalExpression) Interpreter(ctx Context) {
    fmt.Println("终端解释器")
}

// 非终端解析器
type NonterminalExpression struct {
}

func NewNonterminalExpression() *NonterminalExpression {
    return &NonterminalExpression{}
}

func (this *NonterminalExpression) Interpreter(ctx Context) {
    fmt.Println("非终端解释器")
}
func TestNewTerminalExpression(t *testing.T) {
    ctx := NewContext()
    expList := []Expression{}
    expList = append(expList, NewTerminalExpression())
    expList = append(expList, NewNonterminalExpression())
    expList = append(expList, NewTerminalExpression())
    expList = append(expList, NewNonterminalExpression())
    expList = append(expList, NewNonterminalExpression())

    for _, exp := range expList {
        exp.Interpreter(*ctx)
    }
}
/*
=== RUN   TestNewTerminalExpression
终端解释器
非终端解释器
终端解释器
非终端解释器
非终端解释器
--- PASS: TestNewTerminalExpression (0.00s)
PASS
*/

优点

缺点

使用场景

注意

上一篇 下一篇

猜你喜欢

热点阅读