Собеседования для джуна

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.Наличие синглтона снижает тестируемость приложения в целом и классов, которые используют синглтон, в частности.

public class Singleton { private static Singleton INSTANCE; private Singleton() {} public static Singleton getInstance() { if (INSTANCE == null) { INSTANCE = new Singleton(); } return INSTANCE; } }

В этом примере класс Singleton (тут надо оговориться, что это “Ленивый Singleton”) имеет закрытый конструктор, который предотвращает создание его экземпляра извне класса. Метод getInstance() - это общедоступный статический метод, который возвращает единственный экземпляр класса Singleton. Переменная экземпляра объявлена как закрытая и статическая, так что доступ к ней возможен только через метод getInstance().

Метод getInstance() проверяет, равна ли переменная экземпляра null, и если это так, он создает новый экземпляр класса Singleton. Если переменная экземпляра не равна null, она просто возвращает существующий экземпляр.

Таким образом, всегда будет существовать только один экземпляр класса Singleton, и к нему можно получить доступ из любого места в коде, вызвав метод getInstance().

Важно - дополнительные варианты Singleton можете найти у меня в репозитории https://github.com/IgorMartynkin1981/DesignPatterns

ПРОДОЛЖЕНИЕ СЛЕДУЕТ…

22
1 комментарий

Отлично! Ждём продолжения!

1
Ответить