|
| 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