Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Задание на рефакторинг Java класса */
- // Формат приходящих возрастов - "1, 10, 120, 5, 15, 21, 35, 66, 82, 71, 101"
- import org.junit.Test;
- import java.util.HashMap;
- import java.util.Map;
- import java.util.Optional;
- public class SimpleAgeMapperManagerTest {
- @Test
- public void test() {
- SimpleAgeMapperManager ageMapperManager = new SimpleAgeMapperManager(new AgesGetter() {
- });
- ageMapperManager.printMode();
- ageMapperManager.printMatrix();
- ageMapperManager = new SimpleAgeMapperManager(new AgesGetterImpl());
- ageMapperManager.printMode();
- ageMapperManager.printMatrix();
- }
- }
- enum AgesGetterMode {
- DEFAULT, NORMAL
- }
- abstract class AgesGetter {
- public AgesGetterMode getMode() {
- return AgesGetterMode.DEFAULT;
- }
- public Optional<String> receiveAges() {
- return Optional.of("10, 30, 70, 110");
- }
- }
- class AgesGetterImpl extends AgesGetter {
- @Override
- public AgesGetterMode getMode() {
- return AgesGetterMode.NORMAL;
- }
- @Override
- public Optional<String> receiveAges() {
- return Optional.of("1, 10, 120, 5, 15, 21, 35, 66, 82, 71, 101");
- }
- }
- class SimpleAgeMapperManager {
- private final AgesGetter agesGetter;
- // матрица возрастов по типам (child, young, adult, old)
- private final Map<String, String> ageMatrix = new HashMap<>();
- public SimpleAgeMapperManager(AgesGetter agesGetter) {
- this.agesGetter = agesGetter;
- init();
- }
- /**
- * Получить матрицу возрастов
- * @return копия
- */
- public Map<String, String> get() {
- return new HashMap<>(ageMatrix);
- }
- /**
- * Понятное название режима работы класса
- */
- public void printMode() {
- System.out.println("New mode is: " + agesGetter.getMode().name());
- }
- /**
- * Дефолтная печать матрицы возрастов
- */
- public void printMatrix() {
- System.out.println(ageMatrix);
- }
- /**
- * Инициализация матрицы возрастов в зависимости от входных данных
- */
- private void init() {
- // 1 get
- String ages = agesGetter.receiveAges()
- .orElseThrow(() -> new RuntimeException("не может быть null"));
- // 2 parse and save
- String[] partsOfMatrix = ages.split(",");
- if (agesGetter.getMode().ordinal() == AgesGetterMode.NORMAL.ordinal() && partsOfMatrix.length < 10) {
- throw new RuntimeException("Неверное количество исходных возрастов для формирования матрицы");
- } else {
- for (String part : partsOfMatrix) {
- // business requirement
- if (!ageMatrix.containsKey(part)) {
- long age = Long.parseLong(part.trim());
- if (age <= 10) {
- ageMatrix.put(Long.toString(age), "child");
- } else if (age <= 30) {
- ageMatrix.put(Long.toString(age), "young");
- } else if (age <= 70) {
- ageMatrix.put(Long.toString(age), "adult");
- } else if (age <= 110) {
- ageMatrix.put(Long.toString(age), "old");
- } else throw new RuntimeException("Неизвестный возраст: " + age);
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement