一、简介
解释器模式为某个语言定义它的语法(或者叫文法)表示,并定义一个解释器用来处理这个语法。
二、适用场景
- 领域特定语言
- 复杂输入解释
- 可扩展的语言结构
三、UML类图
四、案例
对输入的特定格式的打印语句进行解析并执行。
package main
import (
"fmt"
"strconv"
"strings"
)
type Expression interface {
Interpret()
}
type PrintExpression struct {
Message string
}
func NewPrintExpression(msg string) *PrintExpression {
return &PrintExpression{Message: msg}
}
func (pe *PrintExpression) Interpret() {
fmt.Printf("message: %v\n", pe.Message)
}
type RepeatExpression struct {
RepeatCount int
Expression Expression
}
func NewRepeatExpression(repeatCount int, expression Expression) RepeatExpression {
return RepeatExpression{RepeatCount: repeatCount, Expression: expression}
}
func (re *RepeatExpression) Interpret() {
for i := 0; i < re.RepeatCount; i++ {
re.Expression.Interpret()
}
}
func main() {
command := "REPEAT 3 TIMES: PRINT Hello"
words := strings.Split(command, " ")
fmt.Printf("words: %v\n", words)
if words[0] == "REPEAT" {
repeatCount, _ := strconv.Atoi(words[1])
printExpression := NewPrintExpression(words[4])
repeatExpression := NewRepeatExpression(repeatCount, printExpression)
repeatExpression.Interpret()
}
}