Но ура - теперь ты взрослый! Пришло время собрать колоду дерзких паттернов проектирования😄 Ими тоже можно играть, просто временами будет не так весело🥲
Начну серию постов и выложу первую карту - 6♦️ - паттерн Utility-класс.
🛠Utility-класс - это класс который содержит набор статических методов. Создание объектов такого класса запрещено.
🎯Задача такого класса - сгруппировать в кучку методы которые делают что-то общее, например работают с файлами, или парсят строки во что-то более осмысленное, или генерят случайные значения. Одного поля ягоды короче. Такой класс - это типа ящика для инструментов где лежат методы молоток(), гаечный ключ() и пила().
🗒Правила создания Utility-класса:
- private конструктор для невозможности создания объектов класса
- только статические методы
- нет состояния (нестатических полей)
- класс помечен как final
- минимум переменных класса, т.е. static-полей (лучше делать их константами через final)
Либо можно этот талмуд правил заменить одной аннотацией библиотеки lombok - проставить
@UtilityClass над классом - и все нужные модификаторы волшебным образом прибегут в твой класс.Ты стопроц уже сталкивался с такими классами. Их примеры из родного JDK:
java.lang.Math
java.util.Arrays
java.util.Objects
java.nio.file.Files
java.util.Collections
А еще вот эти библиотечные ребята (они следуют _почти_ всем правилам Utility-класса - за исключением отсутствия приватного конструктора):
org.testng.Assert
org.junit.jupiter.api.Assertions
org.assertj.core.api.Assertions
P.S. Кстати, у меня часто было такое что я сначала писал код, а потом узнавал что это оказывается "паттерн"😄 т.е. приходил к правильной структуре кода интуитивно. А ты пользуешься паттерном Utility у себя в коде? Поделись в комментах - что делает твой Utility-класс.
#колода_паттернов #паттерн #java
