【设计模式】第17节:行为型模式之“解释器模式”

一、简介

解释器模式为某个语言定义它的语法(或者叫文法)表示,并定义一个解释器用来处理这个语法。

二、适用场景

  • 领域特定语言
  • 复杂输入解释
  • 可扩展的语言结构

三、UML类图

四、案例

对输入的特定格式的打印语句进行解析并执行。

go 复制代码
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()
	}
}
相关推荐
小白不太白95013 小时前
设计模式之 模板方法模式
java·设计模式·模板方法模式
色空大师13 小时前
23种设计模式
java·开发语言·设计模式
闲人一枚(学习中)13 小时前
设计模式-创建型-建造者模式
java·设计模式·建造者模式
博风14 小时前
设计模式:6、装饰模式(包装器)
设计模式
A_cot14 小时前
理解设计模式与 UML 类图:构建稳健软件架构的基石
microsoft·设计模式·简单工厂模式·工厂方法模式·uml
君败红颜14 小时前
设计模式之创建模式篇
设计模式
闲人一枚(学习中)17 小时前
设计模式-创建型-抽象工厂模式
设计模式·抽象工厂模式
小白不太白95019 小时前
设计模式之 观察者模式
观察者模式·设计模式
小白不太白95020 小时前
设计模式之 责任链模式
python·设计模式·责任链模式
吾与谁归in21 小时前
【C#设计模式(13)——代理模式(Proxy Pattern)】
设计模式·c#·代理模式