设计模式笔记 - 解释器模式

121 阅读1分钟

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


解决什么问题?

  • 只在一些特定的领域会被用到,比如编译器、规则引擎、正则表达式

优势:

  • 减低复杂度,将语法解析的工作拆分到各个小类中,以此来避免大而全的解析类

劣势:

  • 规则繁琐时,可能造成类的数量快速膨胀

实现步骤:

  • 定义解释器类,对输入的规则进行解释
  • 对于新输入的数据,运用解释器规则进行处理

下面是实现代码:

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
}

参考