Skip to content

Commit 3208564

Browse files
authored
ye should not be offended
These things have I spoken unto you, that ye should not be offended (John 16:1)
1 parent 5630ab9 commit 3208564

1 file changed

Lines changed: 66 additions & 0 deletions

File tree

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
2+
//These things have I spoken unto you, that ye should not be offended (John 16:1)
3+
4+
package com.javarush.task.task29.task2912;
5+
6+
/*
7+
Рефакторинг паттерна Chain of Responsibility
8+
*/
9+
10+
public class Solution {
11+
public static void main(String[] args) {
12+
Logger logger3 = new PhoneLogger(Level.FATAL);
13+
Logger logger2 = new SmsLogger(Level.ERROR);
14+
Logger logger1 = new ConsoleLogger(Level.WARN);
15+
Logger logger0 = new FileLogger(Level.INFO);
16+
17+
logger3.setNext(logger2);
18+
logger2.setNext(logger1);
19+
logger1.setNext(logger0);
20+
21+
logger3.inform("All OK", Level.INFO);
22+
logger3.inform("We find a bug", Level.WARN);
23+
logger3.inform("Database connection error", Level.ERROR);
24+
logger3.inform("System shut down", Level.FATAL);
25+
}
26+
}
27+
28+
/*
29+
Рефакторинг паттерна Chain of Responsibility
30+
31+
Есть программа, в которой реализована система логирования по принципу:
32+
33+
- если событие уровня FATAL - происходит звонок директору, отправляется СМС-сообщение CEO, выводится сообщение в консоль, происходит логирование в файл;
34+
35+
- если событие уровня ERROR - отправляется СМС-сообщение CEO, выводится сообщение в консоль, происходит логирование в файл;
36+
37+
- если событие уровня WARN - выводится сообщение в консоль, происходит логирование в файл;
38+
39+
- если событие уровня INFO - происходит логирование в файл.
40+
41+
42+
43+
В программе реализован паттерн "цепочка ответственности". Изучи его внимательно. В классах FileLogger, ConsoleLogger, SmsLogger, PhoneLogger есть много повторяющегося кода. Подними весь повторяющийся код в абстрактный класс AbstractLogger.
44+
45+
Подъемом в рефакторинге называется перенос полей, методов, конструкторов из всех наследников в одного общего предка. Из наследников, при этом, удаляется код, который перенесен в класс предка.
46+
47+
48+
49+
Логика работы программы не должна измениться.
50+
51+
52+
53+
54+
55+
Требования:
56+
57+
1. Класс AbstractLogger должен быть абстрактным.
58+
59+
2. Класс AbstractLogger должен поддерживать интерфейс Logger.
60+
61+
3. Необходимо поднять поля level и next в класс AbstractLogger.
62+
63+
4. Необходимо поднять методы setNext(Logger) и inform(String, int) в класс AbstractLogger.
64+
65+
5. Вывод программы должен остаться неизменным.
66+
*/

0 commit comments

Comments
 (0)