- 96
- 191 510
Builder Line
Приєднався 12 лис 2018
Java. Пишем сканер QR кода для Android
Просмотрев данное видео, Вы с нуля на языке программирования Java сможете написать полноценный сканер QR-кода для устройств на платформе Android. Видео демонстрирует подробный алгоритм разработки приложения в среде Android Studio.
Переглядів: 3 928
Відео
Python. Паттерн проектирования программ "Посетитель (Visitor)".
Переглядів 9583 роки тому
В видео рассмотрен пример поведенческого шаблона проектирования программ «Посетитель», позволяющий добавлять в программу новые операции, не изменяя классы объектов, над которыми эти операции могут выполняться. Преимуществом паттерна является то, что он объединяет родственный операции в одном классе, упрощает добавление операций, работающих со сложными структурами объектов. Отрицательным моменто...
Python. Паттерн проектирования программ "Шаблонный метод (Template method)".
Переглядів 8463 роки тому
В видео рассмотрен пример поведенческого шаблона проектирования программ «Шаблонный метод», определяющий основу алгоритма и позволяющий наследникам переопределять некоторые шаги алгоритма, не изменяя его структуру в целом. Преимуществом паттерна является то, что он облегчает повторное использование кода.
Python. Паттерн проектирования программ "Стратегия (Strategy)".
Переглядів 1,8 тис.3 роки тому
В видео рассмотрен пример поведенческого шаблона проектирования программ «Стратегия», который определяет семейство схожих алгоритмов и помещает каждый из них в собственный класс. Положительными моментами является то, что паттерн изолирует код алгоритмов от остальных классов, алгоритмы можно быстро заменять, во время выполнения программы.
Python. Паттерн проектирования программ "Состояние (State)".
Переглядів 2 тис.3 роки тому
В видео рассмотрен пример поведенческого шаблона проектирования программ «Состояние», который позволяет объектам менять поведение в зависимости от своего состояния. Паттерн может найти широкое применение в системах где необходимо избавиться от большого количества условных операторов.
Python. Паттерн проектирования программ "Наблюдатель (Observer)".
Переглядів 1,9 тис.3 роки тому
В видео рассмотрен пример поведенческого шаблона проектирования программ «Наблюдатель», который позволяет одним объектам следить и реагировать на события, происходящие в других объектах.
Python. Паттерн проектирования программ "Снимок (Memento)".
Переглядів 6243 роки тому
В видео рассмотрен пример поведенческого шаблона проектирования программ «Снимок», который позволяет сохранять и восстанавливать прошлые состояния объектов, не раскрывая подробностей их реализации. Положительным моментом использования паттерна является, то что он не нарушает инкапсуляции исходного объекта и упрощает его структуру. Недостатком может быть большое количество памяти, выделяемое при...
Python. Паттерн проектирования программ "Посредник (Mediator)".
Переглядів 1 тис.3 роки тому
В видео рассмотрен пример поведенческого шаблона проектирования программ «Посредник», который позволяет уменьшить связанность множества классов между собой, благодаря перемещению этих связей в один класс-посредник.
Python. Паттерн проектирования программ "Итератор (Iterator)".
Переглядів 8243 роки тому
В видео рассмотрен пример поведенческого шаблона проектирования программ «Итератор», который представляет собой объект, позволяющий получить последовательный доступ к элементам объекта-агрегата без использования описаний каждого из агрегированных объектов.
Python. Паттерн проектирования программ "Команда (Command)".
Переглядів 1,3 тис.3 роки тому
В видео рассмотрен пример поведенческого шаблона проектирования программ «Команда», в котором объект используется для инкапсуляции всей информации, необходимой для выполнения действия или вызова события в более позднее время. Эта информация включает в себя имя метода, объект, который является владельцем метода и значения параметров метода.
Python. Паттерн проектирования программ "Цепочка обязанностей (Chain of responsibility)".
Переглядів 1,2 тис.3 роки тому
В видео рассмотрен пример поведенческого шаблона проектирования программ «Цепочка обязанностей», который предназначенный для организации в системе уровней ответственности.
Python. Паттерн проектирования программ "Заместитель (Proxy)".
Переглядів 1 тис.3 роки тому
В видео рассмотрен пример структурного шаблона проектирования программ «Заместитель», представляющий объект, который контролирует доступ к другому объекту, перехватывая все вызовы к нему. Положительным моментом использования паттерна в клиент-серверном приложении является то, что в нем применяется кэширование ранее полученных данных и тем самым снижается количество запросов к серверу.
Python. Паттерн проектирования программ "Легковес (Flyweight)".
Переглядів 1,1 тис.3 роки тому
В видео рассмотрен пример структурного шаблона проектирования программ «Легковес», который позволяет вместить бóльшее количество объектов в отведённую оперативную память. Легковес экономит память, выделяя и сохраняя общие параметры объектов. Однако при использовании данного паттерна расходуется процессорное время на поиск, а также из-за введения дополнительных классов усложняется код программы.
Python. Паттерн проектирования программ " Фасад (Facade)".
Переглядів 1,5 тис.3 роки тому
В видео рассмотрен пример структурного шаблона проектирования программ «Фасад», позволяющий скрыть сложность системы путём сведения всех возможных внешних вызовов к одному объекту, делегирующему их соответствующим объектам системы. Шаблон применяется для установки некоторого рода политики по отношению к другой группе объектов.
Python. Паттерн проектирования программ "Декоратор (Decorator)".
Переглядів 1,4 тис.3 роки тому
В видео рассмотрен пример структурного шаблона проектирования программ «Декоратор», предназначенный для динамического подключения объекту дополнительного поведения. Шаблон «Декоратор» предоставляет гибкую альтернативу практике создания подклассов с целью расширения функциональности.
Python. Паттерн проектирования программ "Компоновщик (Composite)".
Переглядів 1,4 тис.3 роки тому
Python. Паттерн проектирования программ "Компоновщик (Composite)".
Python. Паттерн проектирования программ " Мост (Bridge)".
Переглядів 1,7 тис.3 роки тому
Python. Паттерн проектирования программ " Мост (Bridge)".
Python. Паттерн проектирования программ " Адаптер (Adapter)". Реализация на уровне классов.
Переглядів 1,3 тис.3 роки тому
Python. Паттерн проектирования программ " Адаптер (Adapter)". Реализация на уровне классов.
Python. Паттерн проектирования программ " Адаптер (Adapter)". Реализация на уровне объектов.
Переглядів 1,9 тис.3 роки тому
Python. Паттерн проектирования программ " Адаптер (Adapter)". Реализация на уровне объектов.
Python. Паттерн проектирования программ "Прототип (Prototype)".
Переглядів 1,9 тис.3 роки тому
Python. Паттерн проектирования программ "Прототип (Prototype)".
Python. Паттерн проектирования программ "Одиночка (Singleton)".
Переглядів 2,4 тис.3 роки тому
Python. Паттерн проектирования программ "Одиночка (Singleton)".
Разрабатываем чат-бот для Telegram на Python
Переглядів 1973 роки тому
Разрабатываем чат-бот для Telegram на Python
Python. Паттерн проектирования программ "Строитель (Builder)".
Переглядів 4,5 тис.3 роки тому
Python. Паттерн проектирования программ "Строитель (Builder)".
Разрабатываем бота - администратора для Telegram канала на Python
Переглядів 1,9 тис.3 роки тому
Разрабатываем бота - администратора для Telegram канала на Python
Python. Паттерн проектирования программ "Абстрактная фабрика (Abstract Factory)".
Переглядів 6 тис.3 роки тому
Python. Паттерн проектирования программ "Абстрактная фабрика (Abstract Factory)".
Python. Паттерн проектирования программ "Фабричный метод (FactoryMethod)".
Переглядів 13 тис.3 роки тому
Python. Паттерн проектирования программ "Фабричный метод (FactoryMethod)".
C++. Паттерн проектирования программ "Посетитель (Visitor)".
Переглядів 1,7 тис.3 роки тому
C . Паттерн проектирования программ "Посетитель (Visitor)".
C++. Паттерн проектирования программ "Шаблонный метод (Template method)".
Переглядів 8123 роки тому
C . Паттерн проектирования программ "Шаблонный метод (Template method)".
C++. Паттерн проектирования программ "Стратегия (Strategy)".
Переглядів 1,6 тис.3 роки тому
C . Паттерн проектирования программ "Стратегия (Strategy)".
Python. Пишем свой мессенджер на Python
Переглядів 2,2 тис.3 роки тому
Python. Пишем свой мессенджер на Python
а вот этого патерна твое обьяснение понравилось. очень доходчиво для чего патерн нужен
намудрил канеш с обьяснением. по выводу все гораздо понятнее чем по самому коду. там видно что текст растет как снежный ком: один слой, затем накладывается другой, потом третий. надо было просто упомянуть его 2е название - врапер(обертщик) и показать код оборачивая один класс в другой. в целом для меня это самый понятный по смыслу патерн.
а что означает "предоставляет глобальную точку доступа к этому экземпляру"? разве любой обьект типа паблик не такой же вседоступный? я думал обьект в синглтоне вызывается через встроенный метод гетИнстанс... тут вместо него гетКонекшн.
Вот это интересно
почти то же самое что и стратегия
Классно, как быстро, понятно и без воды!
больше похоже как заполнять пул, а где использование
Нихуя я попал
Хочется надеяться, что данный программист не пишет код для прода.
😆
delete name и вообще всё, что связано с памятью, это жесть.
Отличный материал!
Станно что автомобиль умеет себя создавать)
выпуЩен
Зачем изначально объявлять интерфейс, а его потом реализовывать в абстрактном классе? Что мешает начать прямо с абстрактного класса?
А не удобнее ли будет реализовывать всё это не через поля и методы, а через свойства? Результат выйдет тот же, но код будет лаконичнее в обращении.
проанализировав можно понять как работает... Дак что именно "мост" - не сказано, пальцем не показано. 2 иерархии классов связанные друг с другом, а где мост то?
Очень доступно и понятно, спасибо )
Блокировка нужна, иначе при создании может быть несколько экземпляров класса
#include <iostream> #include <string> #include <memory> class DataBaseHelper final { private: static std::unique_ptr<DataBaseHelper> data_base_connection; std::string data; private: DataBaseHelper() { std::cout << "Подключение к БД" << std::endl; } public: DataBaseHelper(const DataBaseHelper&) = delete; DataBaseHelper& operator=(const DataBaseHelper&) = delete; static DataBaseHelper* get_connection() { if(!data_base_connection) { data_base_connection = std::unique_ptr<DataBaseHelper>(new DataBaseHelper()); } return data_base_connection.get(); } std::string select_data() { return data; } void insert_data(const std::string& d) { data = d; std::cout << "Новые данные: " << data << " внесены в БД" << std::endl; } }; std::unique_ptr<DataBaseHelper> DataBaseHelper::data_base_connection = nullptr; int main() { const auto connection = DataBaseHelper::get_connection(); connection->insert_data("123"); std::cout << connection->select_data() << std::endl; return 0; }
кратко сухо и с примером - спасибо! Идеально было бы выложить исходник
К сожалению вообще ни о чем объяснение. Почти 10 минут что-то кодишь а толку?
вроде как этот паттерн еще называют "приспособленец"
А в чём проблема через темплейты такой функционал реализовать? Решение через темплейты выглядит как-то более лаконично
Спасибо Вам большое.
Наверное дискретизация будет Sampling(), а не Simpling(). За материал спасибо!
И в этом весь смысл фасада?.. внедрение а ля композиция в качестве реализации клиентского класса… не зря говорил кто-то, что фасад - это если у вас с архитектурой совсем беда, х.рачь все в годобжект, пусть клиент управляет через одну точку входа… не представляю, где в здравом уме можно это все винтить…
Красава, очень круто
Спасибо, ты крут) Могу лишь добавить, что с рефлексией можно легко обойти ограничения данного паттерна =) Но зачем?)
Отличное видео, только звук фонит.
Самый понятный паттерн, как по мне. При чём он как сам по себе понятный, так и понятно где и как его стоио применять.
Можно еще unique_ptr использовать вместо *.
Но не нужно
Что вы как роботы говорите-то без понятных объяснений. Нафиг такие ролики то нужны
шапка канала так и говорит: "You shall die"
Минус за гнусавый голос бота
И нахуй оно нужно?
Подскажите, а зачем в IVisitor указывать метакласс ABCMeta, а не просто указать ABC?
спасибо за видео, помогло и на удивление очень мало видео с прикладными примерами на С++
Полное дерьмо!! из примеров вообще не понятно нахрена так заморачиваться? А что будет, если если передать японский двигатель в российский авто.
Вот именно. Зачем указывать абстрактную аннотацию классу который выпускает определенный вид двигателей. Получается это подразумевает то что этот метод допускает все двигатели всех марок? Но зачем?
Тут не будет утечки памяти из-за того, что в IDeveloper необъявлен деструктор виртуальный?
Будет
Спасибо большое! :)
Хотелось бы добавить специальный метод __del__(self), который будет возвращать свойство __db_connection к None при удалении экземпляра
Зачем функции засовывать в классы? Почему бы в ResourceReader не передавать сами функции?
Хорошие видео. еще бы с утечками что-то делал и вообще супер было бы.
В «интерфейсах» лучше реализовывать выброс not implemented error… имхо… тогда разрабы, забывшие реализовать поведение этого интерфейса, будут сразу получать exception
достаточно будет наследоваться от abc.ABC и в методах использовать декоратор @abstractmethod
@@captainkryuk1899можно и так…🥴
в чем отличие от паттерна фабричный метод?
Фабричный метод подходит, когда нужно дать подклассам возможность контролировать создание одного типа объекта. Абстрактная фабрика используется, когда нужно создавать семейства связанных объектов, которые должны работать вместе и быть взаимозаменяемыми.
пушка ничего лишнего на пальцах
Проблема 99% подобных обучающих материалов в том, что демонстрация применения паттерна осуществляется в искусственном окружении, на искусственном примере. Суть паттерна поймет любая обезьяна, а написать примитивный код сможет даже шимпанзе. Где наглядно можно продемонстрировать неправильную работу функционала и правильную (паттерн) это в геймдеве. А если не в геймдеве, то среднестатистический интерн (джун?) не сможет понять куда как и когда это паттерн засовывать, так как у него нет опыта в проектировании сложных систем где такие паттерны могут применяться.
А если потребуется удалить условный hamming, а всё остальное оставить, то как это сделать?
+++
Переменные kg и lb создаются на стеке, а не выделяются динамически с помощью new, поэтому вызывать на них delete - ошибка.