Это два примера того, как реализовать дизайн шаблона стратегии с использованием функционального стиля Java 8 вместе с циклическим сопоставлением с шаблоном и библиотеками Hamcrest .
Метод PrintDependingOnInput — это стратегия, которая отправляет System.println некоторое сообщение на основе переданного журнала.
AddPrefix — это еще одна стратегия, которая добавляет префикс к сообщению на основе содержимого сообщения.
|
01
02
03
04
05
06
07
08
09
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
59
60
61
62
63
64
65
|
package com.marco.patternmatching; import static org.hamcrest.Matchers.containsString;import static org.hamcrest.Matchers.not;import static org.hamcrest.Matchers.startsWith;import static org.hamcrest.core.AllOf.allOf;import java.util.ArrayList;import java.util.List;import com.aol.cyclops.matcher.builders.Matching; public class FunctionalStrategy { public static void main(String[] args) { List<String> toTest = new ArrayList<>(); toTest.add("INFO everything is fine"); toTest.add("WARN something weird happened"); toTest.add("ERROR NullPointerException"); toTest.add("ERROR IOException"); toTest.stream().forEach(FunctionalStrategy::printDependingOnInput); System.out.println("--------------------"); List<String> messages = new ArrayList<>(); messages.add("everything is fine"); messages.add("something weird happened"); messages.add("NullPointerException"); messages.add("IOException"); messages.stream().map(FunctionalStrategy::addPrefix).forEach(System.out::println); } public static void printDependingOnInput(String log) { Matching .when().isMatch(startsWith("INFO")) .thenConsume(System.out::println) .when().isMatch(startsWith("WARN")) .thenConsume(message -> System.out.println("Found one warning : " + message)) .when().isMatch(allOf(startsWith("ERROR"), containsString("NullPointerException"))) .thenConsume(message -> System.err.println(message)) .when().isMatch(allOf(startsWith("ERROR"), containsString("IOException"))) .thenConsume(message -> System.err.println(message + " Retrying a couple of times")) .match(log); } public static String addPrefix(String log) { return Matching .when().isMatch(allOf(not(containsString("Exception")), not(containsString("weird")))) .thenApply(message -> "INFO " + message) .when().isMatch(containsString("weird")) .thenApply(message -> "WARN " + message) .when().isMatch(containsString("Exception")) .thenApply(message -> "ERROR " + message) .match(log).get(); }} |
Красиво и чисто;)
| Ссылка: | Шаблон стратегии в Java 8 от нашего партнера по JCG Марко Кастильего из блога « Удалить дубликаты и исправление дурных имен» . |