解释器模式为某个语言定义它的语法(或者叫文法)表示,并定义一个解释器用来处理这个语法。
解决什么问题?
- 只在一些特定的领域会被用到,比如编译器、规则引擎、正则表达式
优势:
- 减低复杂度,将语法解析的工作拆分到各个小类中,以此来避免大而全的解析类
劣势:
- 规则繁琐时,可能造成类的数量快速膨胀
实现步骤:
- 定义解释器类,对输入的规则进行解释
- 对于新输入的数据,运用解释器规则进行处理
下面是实现代码:
package main
import (
"fmt"
"strconv"
"strings"
)
type interpreter interface {
parse(rule string)
interpret(int) bool
}
type set struct {
s []int
}
func newSet() *set {
return &set{
s: make([]int, 0),
}
}
func (s *set) parse(rule string) {
sl := strings.Split(rule, ",")
for _, v := range sl {
if i, err := strconv.Atoi(v); err == nil {
s.s = append(s.s, i)
}
}
}
func (s *set) interpret(i int) bool {
for _, v := range s.s {
if v == i {
return true
}
}
return false
}
func (s *set) dump() {
fmt.Println(s.s)
}
func main() {
s := newSet()
s.parse("1,3,4,6")
fmt.Println(s.interpret(2)) // false
fmt.Println(s.interpret(3)) // true
}