Skip to content

Commit 2c2b297

Browse files
committed
设计模式-迭代器模式,解释器模式
1 parent 6fc43e3 commit 2c2b297

File tree

2 files changed

+79
-0
lines changed

2 files changed

+79
-0
lines changed
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package com.design.interpreter;
2+
3+
import org.springframework.expression.EvaluationContext;
4+
import org.springframework.expression.Expression;
5+
import org.springframework.expression.ExpressionParser;
6+
import org.springframework.expression.spel.standard.SpelExpressionParser;
7+
import org.springframework.expression.spel.support.StandardEvaluationContext;
8+
9+
import java.util.ArrayList;
10+
import java.util.List;
11+
12+
/**
13+
* 解释器模式 - 可利用场景比较少
14+
* 可以直接使用Spring及Java自带的
15+
*
16+
* @author wliduo[i@dolyw.com]
17+
* @date 2023/2/2 16:22
18+
*/
19+
public class Main {
20+
21+
public static void main(String[] args) {
22+
// 创建一个ExpressionParser对象,用于解析表达式
23+
ExpressionParser parser = new SpelExpressionParser();
24+
// 最简单的字符串表达式
25+
Expression exp = parser.parseExpression("'HelloWorld'");
26+
System.out.println("'HelloWorld'的结果:" + exp.getValue());
27+
// 调用方法的表达式
28+
exp = parser.parseExpression("'HelloWorld'.concat('!')");
29+
System.out.println("'HelloWorld'.concat('!')的结果: " + exp.getValue());
30+
// 调用对象的getter方法
31+
exp = parser.parseExpression("'HelloWorld'.bytes");
32+
System.out.println("'HelloWorld'.bytes的结果: " + exp.getValue());
33+
// 访问对象的属性(相当于HelloWorld.getBytes().length)
34+
exp = parser.parseExpression("'HelloWorld'.bytes.length");
35+
System.out.println("'HelloWorld'.bytes.length的结果:" + exp.getValue());
36+
// 使用构造器来创建对象
37+
exp = parser.parseExpression("new String('helloworld')" + ".toUpperCase()");
38+
System.out.println("new String('helloworld')" + ".toUpperCase()的结果是: " + exp.getValue(String.class));
39+
// List解释
40+
List<Boolean> list = new ArrayList<>();
41+
list.add(true);
42+
EvaluationContext ctx2 = new StandardEvaluationContext();
43+
// 将list设置成EvaluationContext的一个变量
44+
ctx2.setVariable("list", list);
45+
// 修改list变量的第一个元素的值
46+
parser.parseExpression("#list[0]").setValue(ctx2, "false");
47+
// list集合的第一个元素被改变
48+
System.out.println("list集合的第一个元素为:" + parser.parseExpression("#list[0]").getValue(ctx2));
49+
}
50+
51+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.design.iterator;
2+
3+
import java.util.ArrayList;
4+
import java.util.Collection;
5+
import java.util.Iterator;
6+
7+
/**
8+
* 迭代器模式 - JDK的容器的Iterator
9+
* 有兴趣可以研究源码,自己实现
10+
*
11+
* @author wliduo[i@dolyw.com]
12+
* @date 2023/2/2 16:22
13+
*/
14+
public class Main {
15+
16+
public static void main(String[] args) {
17+
Collection collection = new ArrayList();
18+
for (int i = 0; i < 10; i++) {
19+
collection.add(new String("s" + i));
20+
}
21+
// 遍历
22+
Iterator it = collection.iterator();
23+
while (it.hasNext()) {
24+
System.out.println(it.next());
25+
}
26+
}
27+
28+
}

0 commit comments

Comments
 (0)