定義
- 給定一個(gè)語(yǔ)言,定義它的文法的一種表示,并定義一個(gè)解釋器衔峰,這個(gè)解釋器使用該表示來(lái)解釋語(yǔ)言中的內(nèi)容邻悬。
- 為解釋一種算法或者一種語(yǔ)言創(chuàng)建的解釋器症昏。
適用場(chǎng)景
- 在某個(gè)特定類型問(wèn)題發(fā)生率足夠高的時(shí)候 ,例如對(duì)各種日志的解析父丰。
由于這個(gè)模式在日常開(kāi)發(fā)中很少用到肝谭,因此這里我就當(dāng)做一個(gè)知識(shí)點(diǎn),不做擴(kuò)展
開(kāi)源實(shí)現(xiàn)
Spring 中的 SpEL(Spring Expression Language)
所支持的解釋語(yǔ)法
- Literal expressions
- Method invocation
- Accessing properties, arrays, lists, maps
- Inline lists
- Array construction
- Relational operators
- Assignment
- Class Expression
- Constructors
- Variables
- Ternary Operator (If-Then-Else)
- Safe Navigation operator
- Collection Selection
- Collection Projection
- Expression templating
其中一例子的實(shí)現(xiàn)Method invocation
@SpringBootApplication
public class MethodInvocationApplication {
static Logger logger = Logger.getLogger(MethodInvocationApplication.class);
public static void main(String []args) {
ExpressionParser parser = new SpelExpressionParser();
Expression exp = parser.parseExpression("'Hello World'.concat('!')");
String message = (String) exp.getValue();
}
}
輸出結(jié)果為
Hello World蛾扇!
感興趣的小伙伴可以看一下 這個(gè)博文 SpEL(Spring Expression Language)
小結(jié)
對(duì)于解釋器模式攘烛,我覺(jué)得知道就可以了。畢竟實(shí)際使用確實(shí)有限镀首。