Какое из описаний подходит паттерну «Прокси»?
Anonymous Quiz
6%
Позволяет подклассам переопределить эти этапы, не меняя структуру алгоритма
55%
Предоставляет замену другого объекта для контроля доступа к нему
4%
Определяет алгоритм, некоторые этапы которого делегируются подклассам
35%
Обеспечивает слабую связь, избавляя объекты от необходимости прямо ссылаться друг на друга
❤1👍1
Позволяет объекту изменять своё поведение в зависимости от внутреннего состояния. О каком паттерне идёт речь?
Anonymous Quiz
25%
Стратегия
6%
Абстрактная фабрика
12%
Декоратор
57%
Состояние
Вопрос с собеседования
Для чего нужен Decorator паттерн в Javascript? Приведите пример.
Ответ опубликуем вечером, а пока пишите свои варианты в комментариях!
#interview
Для чего нужен Decorator паттерн в Javascript? Приведите пример.
Ответ опубликуем вечером, а пока пишите свои варианты в комментариях!
#interview
🥱3
Применяется для создания объектов с определенным интерфейсом, реализации которого предоставляются потомками.
Anonymous Quiz
12%
Adapter
48%
Factory Method
2%
Singleton
11%
Strategy
27%
Template Method
👍2
К порождающим паттернам относится...
Anonymous Quiz
92%
Строитель
3%
Компоновщик
4%
Декоратор
1%
Мост
Что такое зависимость (dependency)?
Anonymous Quiz
29%
Описывает связь "часть" - "целое", в которой "часть" может существовать отдельно от "целого"
14%
Подвид агрегации, в которой "части" не могут существовать отдельно от "целого"
40%
Изменение в одной сущности может влиять на состояние или поведение другой сущности
17%
Отношение наследования или реализации интерфейса
Выберите верное утверждение.
Anonymous Quiz
39%
Прототип относится к структурным паттернам
5%
Мост относится к порождающим паттернам
30%
Приспособленец относится к структурным паттернам
26%
Команда относится к структурным паттернам
👍1
#паттерны
Введение
Сегодня мы рассмотрим паттерн проектирования "Абстрактная фабрика".
Классификация
Тип: Порождающий
Определение: Абстрактная фабрика - это порождающий паттерн проектирования, который предоставляет интерфейс для создания семейств взаимосвязанных или взаимозависимых объектов, не специфицируя их конкретных классов.
Грубо говоря, абстрактная фабрика - это "фабрика фабрик", данный паттерн позволяет решить проблему создания целых семейств связанных объектов, без указания конкретных классов продуктов.
С помощью абстрактной фабрики вы можете предоставить библиотеку объектов не расскрывая их реализацию.
Из чего состоит и как работает данный паттерн
1. Абстрактного класса/Интерфейса абстрактной фабрики. Содержит абстрактные методы которые возвращают абстрактные продукты, связанные одной конпцецией.
2. Конретные фабрики. Конкретные фабрики реализут операции которые создают конкретные продукты.
3. Абстрактные классы продуктов. Реализуют интерфейс для всех конретных продуктов своего семейства.
4. Конкретные продукты. Реализуют абстрактные продукты. Продукты одного семейства не могут взаимодействовать, с продуктами другого семейства.
5. Клиент. Клиентский код работает исключительно с абстрактной фабрикой и абстрактными продуктами.
Плюсы данного паттерна
1. Реализует принцип открытости/закрытости.
2. Упращает поддержку кода.
3. Выделяет код производства продуктов в одно место, упрощая поддержку кода.
Минусы данного паттерна
1. Снижает читаемость программы из-за введения множества дополнительных классов.
Пример и задача
Дед Мороз и Пасхальный кролик не успевают сделать игрушки к празднику, которые они будут дарить детям.
Все существует 3 вида игрушек:
1. Лошадка
2. Зайчик
3. Шарик
Всё было бы просто однако Деду Морозу нужны игрушки в новогоднем стиле, а пасхальному кролику в пасхальном.
Создайте абстрактную фабрику игрушек и спасите эти праздники!
Пример из реального кода
Пример из реального кода предоставил @Tishka17. Он разработал замечательный фреймворк aiogram_dialog для разработки интерактивных диалогов и меню в телеграмм ботах, как обычное приложение с графическим интерфейсом.
Вот здесь он использует данный паттерн: https://github.com/Tishka17/aiogram_dialog/blob/develop/aiogram_dialog/manager/manager_middleware.py#L23
Вот его объяснение, какую задачу он решает в данном случае:
Введение
Сегодня мы рассмотрим паттерн проектирования "Абстрактная фабрика".
Классификация
Тип: Порождающий
Определение: Абстрактная фабрика - это порождающий паттерн проектирования, который предоставляет интерфейс для создания семейств взаимосвязанных или взаимозависимых объектов, не специфицируя их конкретных классов.
Грубо говоря, абстрактная фабрика - это "фабрика фабрик", данный паттерн позволяет решить проблему создания целых семейств связанных объектов, без указания конкретных классов продуктов.
С помощью абстрактной фабрики вы можете предоставить библиотеку объектов не расскрывая их реализацию.
Из чего состоит и как работает данный паттерн
1. Абстрактного класса/Интерфейса абстрактной фабрики. Содержит абстрактные методы которые возвращают абстрактные продукты, связанные одной конпцецией.
class AbstractFactory(ABC):
@abstractmethod
def create_product_a(self):
...
@abstractmethod
def create_product_b(self):
...
2. Конретные фабрики. Конкретные фабрики реализут операции которые создают конкретные продукты.
class ConcreteFactory1(AbstractFactory):
def create_product_a(self):
return ConcreteProductA1()
def create_product_b(self):
return ConcreteProductB1()
class ConcreteFactory2(AbstractFactory):
def create_product_a(self):
return ConcreteProductA2()
def create_product_b(self):
return ConcreteProductB2()
3. Абстрактные классы продуктов. Реализуют интерфейс для всех конретных продуктов своего семейства.
class AbstractProductA(ABC):
@abstractmethod
def very_important_super_function_a(self) -> str:
...
class AbstractProductB(ABC):
@abstractmethod
def very_important_super_function_b(self) -> str:
...
4. Конкретные продукты. Реализуют абстрактные продукты. Продукты одного семейства не могут взаимодействовать, с продуктами другого семейства.
class ConcreteProductA1(AbstractProductA):
def very_important_super_function_a(self) -> str:
return "Product A1"
class ConcreteProductA2(AbstractProductA):
def very_important_super_function_a(self) -> str:
return "Product A2"
class ConcreteProductB1(AbstractProductB):
def very_important_super_function_b(self) -> str:
return "Product B1"
class ConcreteProductB2(AbstractProductB):
def very_important_super_function_b(self) -> str:
return "Product B2"
5. Клиент. Клиентский код работает исключительно с абстрактной фабрикой и абстрактными продуктами.
def client(factory: AbstractFactory) -> str:
return factory.create_product_a().very_important_super_function_a()
for factory in (ConcreteFactory1, ConcreteFactory2, ...):
client(factory)
Плюсы данного паттерна
1. Реализует принцип открытости/закрытости.
2. Упращает поддержку кода.
3. Выделяет код производства продуктов в одно место, упрощая поддержку кода.
Минусы данного паттерна
1. Снижает читаемость программы из-за введения множества дополнительных классов.
Пример и задача
Дед Мороз и Пасхальный кролик не успевают сделать игрушки к празднику, которые они будут дарить детям.
Все существует 3 вида игрушек:
1. Лошадка
2. Зайчик
3. Шарик
Всё было бы просто однако Деду Морозу нужны игрушки в новогоднем стиле, а пасхальному кролику в пасхальном.
Создайте абстрактную фабрику игрушек и спасите эти праздники!
Пример из реального кода
Пример из реального кода предоставил @Tishka17. Он разработал замечательный фреймворк aiogram_dialog для разработки интерактивных диалогов и меню в телеграмм ботах, как обычное приложение с графическим интерфейсом.
Вот здесь он использует данный паттерн: https://github.com/Tishka17/aiogram_dialog/blob/develop/aiogram_dialog/manager/manager_middleware.py#L23
Вот его объяснение, какую задачу он решает в данном случае:
❤1
В библиотеке aiogram dialog есть диалог менеджер, он реализует базовую функциональность управления диалогами: старт разным способом, доступ к контексту и т.п.
Также есть менеджер - это временный объект. Он создаётся на время обработки конкретного события. Соответственно, его надо постоянно пересоздавать.
В какой-то момент я решил что неплохо дать возможность что-то в менеджере переопределить, соответственно нужно и фабрику менять.
Для решения этой проблемы абстрактная фабрика подошла лучше всего.
Также есть менеджер - это временный объект. Он создаётся на время обработки конкретного события. Соответственно, его надо постоянно пересоздавать.
В какой-то момент я решил что неплохо дать возможность что-то в менеджере переопределить, соответственно нужно и фабрику менять.
Для решения этой проблемы абстрактная фабрика подошла лучше всего.
Шаблон проектирования Adapter
Адаптер используется, если требуется изменить интерфейс без ущерба для разработки. Этот шаблон позволяет повторно использовать уже имеющийся код, приводя его несовместимый интерфейс к виду, пригодному для использования.
Предположим, что у программиста есть собака, а система ожидает кошку. Эту собаку нужно адаптировать.
Смотреть реализацию
Адаптер используется, если требуется изменить интерфейс без ущерба для разработки. Этот шаблон позволяет повторно использовать уже имеющийся код, приводя его несовместимый интерфейс к виду, пригодному для использования.
Предположим, что у программиста есть собака, а система ожидает кошку. Эту собаку нужно адаптировать.
Смотреть реализацию
👍4🔥2
К какому из видов относится шаблон «Посетитель»?
Anonymous Quiz
3%
Базовые
8%
Структурные
86%
Поведенческие
3%
Порождающие
Вопрос с собеседования
В чем разница между классом и структурой?
Ответ опубликуем завтра, а пока пишите свои варианты в комментариях!
#interview
В чем разница между классом и структурой?
Ответ опубликуем завтра, а пока пишите свои варианты в комментариях!
#interview
Вопрос с собеседования
В чем разница между классом и структурой?
Ответ:
Класс – это определенный пользователем чертеж, на основе которого создаются объекты. Он состоит из методов (набор инструкций), которые выполняются над объектами.
Структура – это определенная пользователем коллекция переменных. Структуры также являются различными типами данных.
#interview
В чем разница между классом и структурой?
Ответ:
Класс – это определенный пользователем чертеж, на основе которого создаются объекты. Он состоит из методов (набор инструкций), которые выполняются над объектами.
Структура – это определенная пользователем коллекция переменных. Структуры также являются различными типами данных.
#interview
🤮5
Какой паттерн предоставляет интерфейс для создания семейств, связанных между собой, или независимых объектов, конкретные классы которых неизвестны?
Anonymous Quiz
21%
Bridge (мост)
72%
Abstract Factory (абстрактная фабрика)
6%
Decorator (декоратор)
1%
Посмотреть результаты
Какой паттерн предоставляет унифицированный интерфейс к множеству интерфейсов в некоторой подсистеме и определяет интерфейс более высокого уровня, облегчающий работу с подсистемой?
Anonymous Quiz
5%
Builder (строитель)
12%
Composite (компоновщик)
81%
Facade (фасад)
2%
Посмотреть результаты
This media is not supported in your browser
VIEW IN TELEGRAM
🔥 Топ-9 паттернов для обмена данными и взаимодействия между компонентами/сервисами в распределенных системах
🔹 Peer-to-Peer
🔹 API Gateway
🔹 Pub-Sub
🔹 Request-Response
🔹 Event Sourcing
🔹 ETL
🔹 Batching
🔹 Streaming Processing
🔹 Orchestration
👉 Источник
#инфографика
🔹 Peer-to-Peer
🔹 API Gateway
🔹 Pub-Sub
🔹 Request-Response
🔹 Event Sourcing
🔹 ETL
🔹 Batching
🔹 Streaming Processing
🔹 Orchestration
👉 Источник
#инфографика
👍5🤬1
⚛️ 6 самых важных шаблонов проектирования в React
Правильное использование паттернов проектирования — ключ к созданию надежных, эффективных и масштабируемых React-приложений. Рассказываем о шаблонах, которые стоит освоить в первую очередь.
👉 Читать статью
👉 Зеркало
Правильное использование паттернов проектирования — ключ к созданию надежных, эффективных и масштабируемых React-приложений. Рассказываем о шаблонах, которые стоит освоить в первую очередь.
👉 Читать статью
👉 Зеркало
🤡1
🔥 6 архитектурных паттернов: на заметку разработчику
☑️ Layered
☑️ Microservices
☑️ Event-Driven
☑️ Client-Server
☑️ Plugin-based
☑️ Hexagonal
👉 Источник
☑️ Layered
☑️ Microservices
☑️ Event-Driven
☑️ Client-Server
☑️ Plugin-based
☑️ Hexagonal
👉 Источник
👍7
📚 Топ-10 книг для разраба
◾️ Общие рекомендации
▫️ The Pragmatic Programmer, Andrew Hunt и David Thomas
▫️ Code Complete, Steve McConnell
◾️ Разработка
▫️ Clean Code, Robert C. Martin
▫️ Refactoring, Martin Fowler
◾️ Архитектура
▫️ Designing Data-Intensive Applications, Martin Kleppmann
▫️ System Design Interview, Alex Xu
◾️ Паттерны проектирования
▫️ Design Patterns, Eric Gamma и другие
▫️ Domain-Driven Design, Eric Evans
◾️ Структуры данных и алгоритмы
▫️ Introduction to Algorithms, Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, и Clifford Stein
▫️ Cracking the Coding Interview, Gayle Laakmann McDowell
В комментарии кидайте свою любимую книгу, которая повлияла на вас как на разработчика👇
🔗 Источник
◾️ Общие рекомендации
▫️ The Pragmatic Programmer, Andrew Hunt и David Thomas
▫️ Code Complete, Steve McConnell
◾️ Разработка
▫️ Clean Code, Robert C. Martin
▫️ Refactoring, Martin Fowler
◾️ Архитектура
▫️ Designing Data-Intensive Applications, Martin Kleppmann
▫️ System Design Interview, Alex Xu
◾️ Паттерны проектирования
▫️ Design Patterns, Eric Gamma и другие
▫️ Domain-Driven Design, Eric Evans
◾️ Структуры данных и алгоритмы
▫️ Introduction to Algorithms, Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, и Clifford Stein
▫️ Cracking the Coding Interview, Gayle Laakmann McDowell
В комментарии кидайте свою любимую книгу, которая повлияла на вас как на разработчика👇
🔗 Источник
👍3
Паттерны
В одном репозитории собрано 111 паттернов проектирования. На данный момент это самый популярный репозиторий на языке Java, у него почти 50k звёзд.
Для каждого паттерна есть подробное описание и примеры реализации на Java: https://github.com/iluwatar/java-design-patterns
#паттерны #java
В одном репозитории собрано 111 паттернов проектирования. На данный момент это самый популярный репозиторий на языке Java, у него почти 50k звёзд.
Для каждого паттерна есть подробное описание и примеры реализации на Java: https://github.com/iluwatar/java-design-patterns
#паттерны #java