#patterns
Одиночка (англ. Singleton) — порождающий шаблон проектирования, гарантирующий, что в однопоточном приложении будет единственный экземпляр некоторого класса, и предоставляющий глобальную точку доступа к этому экземпляру.
Одиночка (англ. Singleton) — порождающий шаблон проектирования, гарантирующий, что в однопоточном приложении будет единственный экземпляр некоторого класса, и предоставляющий глобальную точку доступа к этому экземпляру.
#patterns
Паттерн Стратегия
Начнем с проблемы, которую решает данный паттерн. Сразу же приведем пример.
У нас есть класс Navigator (#1), в котором мы в зависимости от типа передвижения прокладывает маршрут от точки A в точку B.
Все, в принципе, работает. Но проблемы начинаются при расширении типов передвижения. Если пользователь теперь хочет чтобы ему прокладывался маршрут когда он на машине, мы должны лезть в наш исходный класс, и вручную это все прописывать. Также, мы нарушаем один из принципов SOLID, что класс должен быть закрыт для изменения, но открыт для расширения.
Решение. Вместо кучи if 'ов, мы создадим интерфейс (#2), который сможет принимать любые типы передвижения.
Теперь, наш класс мы не трогаем. Мы создали интерфейс с методом который строит маршрут. И создали пару классов, которые реализуют этот метод по своему. В общем, теперь мы можем создать хоть тысячу классов с типами передвижения, благодаря которым сможет строить маршрут так, как это надо, не изменяя базовый класс, а только расширяя его "возможности".
Паттерн Стратегия
Начнем с проблемы, которую решает данный паттерн. Сразу же приведем пример.
У нас есть класс Navigator (#1), в котором мы в зависимости от типа передвижения прокладывает маршрут от точки A в точку B.
Все, в принципе, работает. Но проблемы начинаются при расширении типов передвижения. Если пользователь теперь хочет чтобы ему прокладывался маршрут когда он на машине, мы должны лезть в наш исходный класс, и вручную это все прописывать. Также, мы нарушаем один из принципов SOLID, что класс должен быть закрыт для изменения, но открыт для расширения.
Решение. Вместо кучи if 'ов, мы создадим интерфейс (#2), который сможет принимать любые типы передвижения.
Теперь, наш класс мы не трогаем. Мы создали интерфейс с методом который строит маршрут. И создали пару классов, которые реализуют этот метод по своему. В общем, теперь мы можем создать хоть тысячу классов с типами передвижения, благодаря которым сможет строить маршрут так, как это надо, не изменяя базовый класс, а только расширяя его "возможности".
(Код не является идеальным примером реализации этого паттерна, он просто кое-как отображает его суть)