Собеседования для джуна
Design Pattern (вступление)
Всем привет!
Это мой первый подход для написания статей)) и наверное необходимо представиться, и рассказать кто я.
Так вот я Sr. SCADA Developer и на протяжении более 15 лет кодил на различных промышленных языках, занятие интересное, но узконаправленное и вот однажды стоя на остановке в 7-00, ожидая транспорт на “завод”, я понял, что всё… . надоело… . Я принял решение переквалифицироваться в трушного разработчика.
Тут наверное нужно пояснить что за трушный программист — к своей основной работе я также имел дело писать и на 1С 8.х для различных частных контор, а как общеизвестно разработчиков на 1С считают “неполноценными” разработчики с других языков)))). Конец пояснения
Не буду объяснять почему, зачем и как вообщем я выбрал язык Java (это тема отдельного эпоса) . В феврале 2022 я пошёл учиться в онлайн школу Яндекс.Практикум (также будет отдельный эпос #Практикум ) . Пройдя половину обучения я начал потихоньку Фрилансить и параллельно проходить собесы для смены своего завода на уютное кресло Java-developer, как же я был наивен, что я всё знаю и всем нужен, ага как бы не так))))
Проведя ретро собезов я выявил ряд дыр в своих фундаментальных знаниях и первое это Паттерны (Design Pattern) проектирования. Исследовав глубины интернета я собрал минимальный кейс по восьми Паттернам который позволяет с легкостью проходить этот блок собеседования! Хочу отметить, что это далеко не все шаблоны, но наиболее востребованные у интервьюеров))))
Как сказано в Википедии:
Design Pattern — повторяемая архитектурная конструкция, представляющая собой решение проблемы проектирования в рамках некоторого часто возникающего контекста.
Обычно шаблон не является законченным образцом, который может быть прямо преобразован в код; это лишь пример решения задачи, который можно использовать в различных ситуациях. Объектно-ориентированные шаблоны показывают отношения и взаимодействия между классами или объектами, без определения того, какие конечные классы или объекты приложения будут использоваться.
И начнём мы конечно же с Singleton.
1. Singleton
- это шаблон проектирования, который гарантирует, что класс имеет только один экземпляр и предоставляет глобальную точку доступа к этому экземпляру. Основная идея, лежащая в основе шаблона, заключается в создании единственного экземпляра класса и предоставлении глобальной точки доступа к этому экземпляру.
Некоторыми ключевыми особенностями одноэлементного шаблона являются:
• Шаблон singleton гарантирует, что класс имеет только один экземпляр, и предоставляет глобальную точку доступа к этому экземпляру.
• Шаблон singleton использует частный конструктор и статический метод, чтобы гарантировать, что создается только один экземпляр класса.
• Шаблон singleton предоставляет глобальную точку доступа к единственному экземпляру класса, обычно с помощью статического свойства или метода.
Использование singleton имеет ряд преимуществ:
1.Дает гарантию, что у класса будет всего один экземпляр класса.
2.Предоставляет глобальную точку доступа к экземпляру данного класса.
Однако у этого шаблона есть недостатки:
1.Синглтон нарушает SRP (Single Responsibility Principle) — класс синглтона, помимо непосредственных обязанностей, занимается еще и контролированием количества своих экземпляров.
2.Зависимость обычного класса или метода от синглтона не видна в публичном контракте класса.
3.Глобальные переменные это плохо. Синглтон превращается в итоге в одну здоровенную глобальную переменную.
4.Наличие синглтона снижает тестируемость приложения в целом и классов, которые используют синглтон, в частности.
В этом примере класс Singleton (тут надо оговориться, что это “Ленивый Singleton”) имеет закрытый конструктор, который предотвращает создание его экземпляра извне класса. Метод getInstance() - это общедоступный статический метод, который возвращает единственный экземпляр класса Singleton. Переменная экземпляра объявлена как закрытая и статическая, так что доступ к ней возможен только через метод getInstance().
Метод getInstance() проверяет, равна ли переменная экземпляра null, и если это так, он создает новый экземпляр класса Singleton. Если переменная экземпляра не равна null, она просто возвращает существующий экземпляр.
Таким образом, всегда будет существовать только один экземпляр класса Singleton, и к нему можно получить доступ из любого места в коде, вызвав метод getInstance().
Важно - дополнительные варианты Singleton можете найти у меня в репозитории https://github.com/IgorMartynkin1981/DesignPatterns
ПРОДОЛЖЕНИЕ СЛЕДУЕТ…
Отлично! Ждём продолжения!