Тёмный
Builder Line
Builder Line
Builder Line
Подписаться
Комментарии
@user-tl3nc8lj5r
@user-tl3nc8lj5r 5 дней назад
А не удобнее ли будет реализовывать всё это не через поля и методы, а через свойства? Результат выйдет тот же, но код будет лаконичнее в обращении.
@tutobab
@tutobab 5 дней назад
проанализировав можно понять как работает... Дак что именно "мост" - не сказано, пальцем не показано. 2 иерархии классов связанные друг с другом, а где мост то?
@JustPlayingBroGD
@JustPlayingBroGD 14 дней назад
Очень доступно и понятно, спасибо )
@user-fu1gf7lp7x
@user-fu1gf7lp7x 16 дней назад
Блокировка нужна, иначе при создании может быть несколько экземпляров класса
@user-rd3fu8cv7r
@user-rd3fu8cv7r 19 дней назад
#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; }
@IgorChistruga
@IgorChistruga Месяц назад
кратко сухо и с примером - спасибо! Идеально было бы выложить исходник
@ArchDevWorkshop
@ArchDevWorkshop Месяц назад
К сожалению вообще ни о чем объяснение. Почти 10 минут что-то кодишь а толку?
@nikitakuznetcov8933
@nikitakuznetcov8933 2 месяца назад
вроде как этот паттерн еще называют "приспособленец"
@BlackRattata
@BlackRattata 2 месяца назад
А в чём проблема через темплейты такой функционал реализовать? Решение через темплейты выглядит как-то более лаконично
@fogfogi
@fogfogi 4 месяца назад
Спасибо Вам большое.
@denkir1977
@denkir1977 4 месяца назад
Наверное дискретизация будет Sampling(), а не Simpling(). За материал спасибо!
@user-pg8ry1tm3t
@user-pg8ry1tm3t 4 месяца назад
И в этом весь смысл фасада?.. внедрение а ля композиция в качестве реализации клиентского класса… не зря говорил кто-то, что фасад - это если у вас с архитектурой совсем беда, х.рачь все в годобжект, пусть клиент управляет через одну точку входа… не представляю, где в здравом уме можно это все винтить…
@captainkryuk1899
@captainkryuk1899 4 месяца назад
Красава, очень круто
@user-dq3qb5kb8h
@user-dq3qb5kb8h 4 месяца назад
Спасибо, ты крут) Могу лишь добавить, что с рефлексией можно легко обойти ограничения данного паттерна =) Но зачем?)
@DadundddaD
@DadundddaD 5 месяцев назад
Отличное видео, только звук фонит.
@shejin_2371
@shejin_2371 5 месяцев назад
Самый понятный паттерн, как по мне. При чём он как сам по себе понятный, так и понятно где и как его стоио применять.
@nikolayz3347
@nikolayz3347 5 месяцев назад
Можно еще unique_ptr использовать вместо *.
@user-mm5ln4qh5q
@user-mm5ln4qh5q 2 месяца назад
Но не нужно
@Alex89muller
@Alex89muller 5 месяцев назад
Что вы как роботы говорите-то без понятных объяснений. Нафиг такие ролики то нужны
@deimos56
@deimos56 5 месяцев назад
шапка канала так и говорит: "You shall die"
@VoimiX2008
@VoimiX2008 6 месяцев назад
Минус за гнусавый голос бота
@aleksanderm1947
@aleksanderm1947 6 месяцев назад
И нахуй оно нужно?
@GOoD-vd5et
@GOoD-vd5et 6 месяцев назад
Подскажите, а зачем в IVisitor указывать метакласс ABCMeta, а не просто указать ABC?
@user-ps7wt6jg1q
@user-ps7wt6jg1q 6 месяцев назад
спасибо за видео, помогло и на удивление очень мало видео с прикладными примерами на С++
@Igor-infi
@Igor-infi 7 месяцев назад
Полное дерьмо!! из примеров вообще не понятно нахрена так заморачиваться? А что будет, если если передать японский двигатель в российский авто.
@megawatt_140
@megawatt_140 3 месяца назад
Вот именно. Зачем указывать абстрактную аннотацию классу который выпускает определенный вид двигателей. Получается это подразумевает то что этот метод допускает все двигатели всех марок? Но зачем?
@daniilivanik5021
@daniilivanik5021 7 месяцев назад
Тут не будет утечки памяти из-за того, что в IDeveloper необъявлен деструктор виртуальный?
@Ryu-os3nq
@Ryu-os3nq 4 месяца назад
Будет
@mrshark6765
@mrshark6765 7 месяцев назад
Спасибо большое! :)
@daniilkoroliov2355
@daniilkoroliov2355 7 месяцев назад
Хотелось бы добавить специальный метод __del__(self), который будет возвращать свойство __db_connection к None при удалении экземпляра
@FeelUs
@FeelUs 7 месяцев назад
Зачем функции засовывать в классы? Почему бы в ResourceReader не передавать сами функции?
@alexlem3597
@alexlem3597 7 месяцев назад
Хорошие видео. еще бы с утечками что-то делал и вообще супер было бы.
@user-pg8ry1tm3t
@user-pg8ry1tm3t 7 месяцев назад
В «интерфейсах» лучше реализовывать выброс not implemented error… имхо… тогда разрабы, забывшие реализовать поведение этого интерфейса, будут сразу получать exception
@captainkryuk1899
@captainkryuk1899 3 месяца назад
достаточно будет наследоваться от abc.ABC и в методах использовать декоратор @abstractmethod
@user-pg8ry1tm3t
@user-pg8ry1tm3t 3 месяца назад
@@captainkryuk1899можно и так…🥴
@fluke_8431
@fluke_8431 8 месяцев назад
в чем отличие от паттерна фабричный метод?
@best_coozy_dad
@best_coozy_dad 5 дней назад
Фабричный метод подходит, когда нужно дать подклассам возможность контролировать создание одного типа объекта. Абстрактная фабрика используется, когда нужно создавать семейства связанных объектов, которые должны работать вместе и быть взаимозаменяемыми.
@romabulava899
@romabulava899 8 месяцев назад
пушка ничего лишнего на пальцах
@high-level-content-maker
@high-level-content-maker 9 месяцев назад
Проблема 99% подобных обучающих материалов в том, что демонстрация применения паттерна осуществляется в искусственном окружении, на искусственном примере. Суть паттерна поймет любая обезьяна, а написать примитивный код сможет даже шимпанзе. Где наглядно можно продемонстрировать неправильную работу функционала и правильную (паттерн) это в геймдеве. А если не в геймдеве, то среднестатистический интерн (джун?) не сможет понять куда как и когда это паттерн засовывать, так как у него нет опыта в проектировании сложных систем где такие паттерны могут применяться.
@rayankrimmer2611
@rayankrimmer2611 10 месяцев назад
А если потребуется удалить условный hamming, а всё остальное оставить, то как это сделать?
@user-zi4tu2pk6g
@user-zi4tu2pk6g 10 месяцев назад
+++
@fantastiw
@fantastiw 10 месяцев назад
Переменные kg и lb создаются на стеке, а не выделяются динамически с помощью new, поэтому вызывать на них delete - ошибка.
@nikitamarkov3212
@nikitamarkov3212 11 месяцев назад
спасибо, разобрался после вашего ролика
@maxpo801
@maxpo801 11 месяцев назад
невыносимый голос
@olegkireev8739
@olegkireev8739 11 месяцев назад
Благодарю интересно
@olegkireev8739
@olegkireev8739 11 месяцев назад
Все кратко и по делу. Просто Отлично
@user-zd3qw7le5c
@user-zd3qw7le5c Год назад
тут вроде как ТРИ РАЗНЫХ ПОСЕТИТЕЛЯ . .. и каждый посещает по одному месту . . . я ожидал что ОДИН посетитель посетит три разных места
@user-vh5xv3sx1y
@user-vh5xv3sx1y Год назад
Но внутри цикла создал 3 посетителей)
@ottooctavius2660
@ottooctavius2660 Год назад
спасибо
@nightyonetwothree
@nightyonetwothree Год назад
если 3 раза запустить конвеер, то получим состояния : off >>> on > on > on; а потом 3 раза нажать cancel, получим: on < off < off <<< off, т.е. промежуточные состояния не соотвествуют друг-другу. Поэтому вместо того что бы просто пушить все нажатия в стак, нужно сначала проверить, адекватна ли команда (меняется ли состояние или нет), в противном случае игнорировать нажатие.
@anlemna4367
@anlemna4367 Год назад
Спасибо!!!!
@eclipse9925
@eclipse9925 Год назад
Материал хороший, но было бы круто пример схож с фабрикой или телефоном, слишком абстрактно
@revingar
@revingar Год назад
а деструктор прописывать не надо, потому что статичный обьект существует до конца работы программы?
@magellan1473
@magellan1473 Год назад
И всё же спасибо за видео! //Интерфейс - абстрактное представление выпуска нового автомобиля class IProduction { public: virtual void Release() = 0; virtual ~ IProduction() {} }; // Интерфейс абстрактного цеха по производству автомобилей class IWorkShop { public: // метод, возвратит абстрактный автомобиль virtual IProduction* Create() = 0; virtual ~ IWorkShop(){} }; да, добавить деструкторы и динамическое освобождение памяти int main() { // code // delete creator; delete car; delete truck; }
@user-mm5ln4qh5q
@user-mm5ln4qh5q 2 месяца назад
Зачем в интерфейсе деструктор? Его же можно просто в наследнике сделать
@sharangaful
@sharangaful Год назад
Зачем говорить как искусственный интеллект, мерзкий голос
@vesh95
@vesh95 Год назад
Надо было сначала подкинуть андроид девелопера и сделать полную версию телефона, а потом яблочнх разрабов и сделать урезанную версию, тогда бы получился айфон на андроиде
@shark1203-
@shark1203- Год назад
Очередное тупое видео, где не указаны ни ссылки на исходники ни на само apk работающего приложения, бесполезный шлак текста