设计模式这样玩泰简单(Golang版)-解释器模式
Posted hello_读书就是赚钱
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式这样玩泰简单(Golang版)-解释器模式相关的知识,希望对你有一定的参考价值。
场景
老板:现在我们要实现自己的一套规则引擎,解释自定义的语法,你有什么好的方案
你:好的老板,那就是使用解释器模式
方案
解释器模式,用一波对象封装了对某种语法解析过程的实现.在这个设计模式中,使用统一的解释器接口规范了解释器的行为.使用不同的解释器实现不同的语法解析.除此之外,在这个模式中,还引入了上下文对象这个概念,是因为我们在对语法解析的过程不是某个对象一次就能处理完,所以引入了上下文对象去缓存处理过程中暂存数据,结果等.
看的设计模式越多觉得每个模式越像,都是利用了对象之间的组合,依赖倒置来解决问题.而解释器模式,他的主要特点是他就是来解决语法解析这个问题的,提供对语法解析的可扩展性,虽然看起来也像鸡了责任链模式.所以记住上下文对象这是解释器模式独有的.
下面的实现中,我主要实现了对自己的独有语法的解析,输入
“Begin 1 10 END”
表示从1打印到9
实现
see:https://github.com/jjtHappy/design-pattern-so-simple
package main
import (
"fmt"
"strconv"
"strings"
)
type Interpreter interface {
Handle()
}
type ForPrintInterpreter struct {
Text []string
Index int32
}
func (f *ForPrintInterpreter) Handle() {
start,_ := strconv.Atoi(f.Text[f.Index])
f.Index++
end,_ := strconv.Atoi(f.Text[f.Index])
for ;start < end;start++{
fmt.Println(start)
}
bei:=&BeginEndInterpreter{
Text: f.Text,
Index: f.Index+1,
}
bei.Handle()
}
type BeginEndInterpreter struct {
Text []string
Index int32
}
func (b *BeginEndInterpreter) Handle() {
if b.Text[b.Index] == "Begin"{
fi:=&ForPrintInterpreter{
Text: b.Text,
Index: b.Index+1,
}
fi.Handle()
}else{
return
}
}
func main() {
fmt.Println("老板:设计一门自己的语言,用什么方案好")
fmt.Println("你:好的")
text:=strings.Split("Begin 1 10 End"," ")
bei:=&BeginEndInterpreter{
Text: text,
Index:0,
}
bei.Handle()
}
以上是关于设计模式这样玩泰简单(Golang版)-解释器模式的主要内容,如果未能解决你的问题,请参考以下文章