Advertisement
VirKato

AgesMapperManager

Sep 6th, 2023 (edited)
803
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.67 KB | Source Code | 0 0
  1. /* Задание на рефакторинг Java класса */
  2.  
  3. // Формат приходящих возрастов - "1, 10, 120, 5, 15, 21, 35, 66, 82, 71, 101"
  4.  
  5. import org.junit.Test;
  6.  
  7. import java.util.HashMap;
  8. import java.util.Map;
  9. import java.util.Optional;
  10.  
  11.  
  12. public class SimpleAgeMapperManagerTest {
  13.     @Test
  14.     public void test() {
  15.         SimpleAgeMapperManager ageMapperManager = new SimpleAgeMapperManager(new AgesGetter() {
  16.         });
  17.         ageMapperManager.printMode();
  18.         ageMapperManager.printMatrix();
  19.  
  20.         ageMapperManager = new SimpleAgeMapperManager(new AgesGetterImpl());
  21.         ageMapperManager.printMode();
  22.         ageMapperManager.printMatrix();
  23.     }
  24. }
  25.  
  26.  
  27. enum AgesGetterMode {
  28.     DEFAULT, NORMAL
  29. }
  30.  
  31.  
  32. abstract class AgesGetter {
  33.     public AgesGetterMode getMode() {
  34.         return AgesGetterMode.DEFAULT;
  35.     }
  36.  
  37.     public Optional<String> receiveAges() {
  38.         return Optional.of("10, 30, 70, 110");
  39.     }
  40. }
  41.  
  42.  
  43. class AgesGetterImpl extends AgesGetter {
  44.     @Override
  45.     public AgesGetterMode getMode() {
  46.         return AgesGetterMode.NORMAL;
  47.     }
  48.  
  49.     @Override
  50.     public Optional<String> receiveAges() {
  51.         return Optional.of("1, 10, 120, 5, 15, 21, 35, 66, 82, 71, 101");
  52.     }
  53. }
  54.  
  55.  
  56. class SimpleAgeMapperManager {
  57.     private final AgesGetter agesGetter;
  58.  
  59.     // матрица возрастов по типам (child, young, adult, old)
  60.     private final Map<String, String> ageMatrix = new HashMap<>();
  61.  
  62.  
  63.     public SimpleAgeMapperManager(AgesGetter agesGetter) {
  64.         this.agesGetter = agesGetter;
  65.         init();
  66.     }
  67.  
  68.     /**
  69.      * Получить матрицу возрастов
  70.      * @return копия
  71.      */
  72.     public Map<String, String> get() {
  73.         return new HashMap<>(ageMatrix);
  74.     }
  75.  
  76.     /**
  77.      * Понятное название режима работы класса
  78.      */
  79.     public void printMode() {
  80.         System.out.println("New mode is: " + agesGetter.getMode().name());
  81.     }
  82.  
  83.     /**
  84.      * Дефолтная печать матрицы возрастов
  85.      */
  86.     public void printMatrix() {
  87.         System.out.println(ageMatrix);
  88.     }
  89.  
  90.     /**
  91.      * Инициализация матрицы возрастов в зависимости от входных данных
  92.      */
  93.     private void init() {
  94.         // 1 get
  95.         String ages = agesGetter.receiveAges()
  96.                 .orElseThrow(() -> new RuntimeException("не может быть null"));
  97.  
  98.         // 2 parse and save
  99.         String[] partsOfMatrix = ages.split(",");
  100.         if (agesGetter.getMode().ordinal() == AgesGetterMode.NORMAL.ordinal() && partsOfMatrix.length < 10) {
  101.             throw new RuntimeException("Неверное количество исходных возрастов для формирования матрицы");
  102.         } else {
  103.             for (String part : partsOfMatrix) {
  104.                 // business requirement
  105.                 if (!ageMatrix.containsKey(part)) {
  106.                     long age = Long.parseLong(part.trim());
  107.                     if (age <= 10) {
  108.                         ageMatrix.put(Long.toString(age), "child");
  109.                     } else if (age <= 30) {
  110.                         ageMatrix.put(Long.toString(age), "young");
  111.                     } else if (age <= 70) {
  112.                         ageMatrix.put(Long.toString(age), "adult");
  113.                     } else if (age <= 110) {
  114.                         ageMatrix.put(Long.toString(age), "old");
  115.                     } else throw new RuntimeException("Неизвестный возраст: " + age);
  116.                 }
  117.             }
  118.         }
  119.     }
  120. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement