策略模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
/*
* @Author Liruilong
* @Description :策略模式
* 一个包含某个算法的接口
* 一个或多个该接口的集体的实现,即对于接口的算法的不同的实现
* 一个或多个该接口的具体实现
*Thread类通过重复写run方法就是一种策略模式的体现
* @Date 7:21 2019/9/5
**/
@FunctionalInterface
interface VzlidtionStrategy{
boolean executo(String s);
}
// 具体的实现
class IsAllLowerCase implements VzlidtionStrategy{

@Override
public boolean executo(String s) {
return s.matches("[a-z]+");
}
}
class IsNumeric implements VzlidtionStrategy{

@Override
public boolean executo(String s) {
return s.matches("\\d+");
}
}

class Validator {
private final VzlidtionStrategy vzlidtionStrategy;

Validator(VzlidtionStrategy vzlidtionStrategy) {
this.vzlidtionStrategy = vzlidtionStrategy;
}
public boolean validate(String e){
return vzlidtionStrategy.executo(e);
}
public static void main(String[] args) {
// 不同的算法实现
Validator validator = new Validator(new IsAllLowerCase());
boolean b1 = validator.validate("sddd");
Validator validator1 = new Validator(new IsNumeric());
boolean b2 = validator1.validate("sddd");

// 使用lambda表达式
Validator validator2 = new Validator((s) ->s.matches("[a-z]+"));
boolean b3 = validator2.validate("ddfdf");

new Thread().run();//Runnable

System.out.println(b1);
System.out.println(b2);
System.out.println(b3);

}
}