Шаблоны Java. AbstractFactory (Абcтрактная фабрика)

  Рет қаралды 58,685

Eugene Suleimanov

Eugene Suleimanov

8 жыл бұрын

proselyte.net/
Шаблон: Абстрактная фабрика (Abstract Factory)
=======================================================================================================
Цель:
Создание интерфейса, для создания множества взаимосвязанных или взаимозависимых объектов, без жёсткой
привязке к конкретным классам.
=======================================================================================================
Для чего используется:
Для создания множеств взаимосвязанных объектов.
=======================================================================================================
Пример использования:
- система не должна зависеть от метода создания, компоновки и представления входящих в неё объектов;
- входящие взаимосвязанные объекты должны использоваться вместе;
- система должна конфигурироваться одним из множеств объектов, из которых она состоит;
- нам необходимо предоставить множество объектов, раскрывая только их интерфейсы но не реализацию.
=======================================================================================================

Пікірлер: 76
@user-ln8kq6gb7t
@user-ln8kq6gb7t 3 жыл бұрын
Для тех кто не понял, вот вам основное различие: Фабричный метод используется для создания только одного продукта Абстрактная фабрика - это создание семейств связанных или зависимых продуктов.
@arahnid_9844
@arahnid_9844 9 ай бұрын
Спасибо, я как раз это упустил)
@glookeemaska133
@glookeemaska133 9 ай бұрын
Легенда
@alexsecret3496
@alexsecret3496 4 ай бұрын
лучший коммент рили
@RR-lc1yi
@RR-lc1yi 7 жыл бұрын
чувствуется уровень. 90% остальных видео реально рядом не валялись - все четко, по делу, не отвлекаясь на простые вещи. Респект
@theAmarale
@theAmarale 7 ай бұрын
Это сарказм?
@arctic9328
@arctic9328 7 ай бұрын
ты идиот? @@theAmarale
@user-ev1me4xq8v
@user-ev1me4xq8v 4 жыл бұрын
я не знаю как, кому, а мне данный формат видео лучше заходит. Это на основе древнего и первобытного, делай как я. Темп отличный. Лишнего нет. Да и всяких слов паразитов минимум.
@EugeneSuleimanov
@EugeneSuleimanov 4 жыл бұрын
Спасибо за отзыв!
@user-sz7dn6md5p
@user-sz7dn6md5p 2 жыл бұрын
Очень понятно когда он показывает разницу паттернов. Уважуха братан✊
@user-gl9tr9nb1u
@user-gl9tr9nb1u 2 жыл бұрын
Самое толковое и дельное объяснение абстрактных фабрик... Без воды и бессмысленного прыгания у доски и калякания всяких идиотских картинок. Почти парное программирование. Огромный респект
@Lineage2GF
@Lineage2GF 5 жыл бұрын
Столько всего прочел пересмотрел и никак не понимал до просмотра этого видео. Спасибо !
@elpirato5428
@elpirato5428 3 жыл бұрын
Хорошо когда без ошибок всю информацию сразу в правильном порядке преподносят, сразу все в памяти откладывается.
@faniskhalikov9736
@faniskhalikov9736 3 жыл бұрын
Спасибо за качественный урок) Отличный материал для начинающих и не только, лучше начинаешь понимать необходимость применения интерфейсов.
@EugeneSuleimanov
@EugeneSuleimanov 3 жыл бұрын
Спасибо :)
@user-bt9hx3ik6e
@user-bt9hx3ik6e 3 жыл бұрын
отличный урок. четко и понятно показан шаблон и как работает. спасибо!
@Maratreason
@Maratreason 7 жыл бұрын
Супер, тоже респект!!! Все четко и понятно.
@anymko3931
@anymko3931 4 жыл бұрын
Очень нравится как звучит клава, обычно звук ацтой, а тут я бывает заслушиваюсь больше над звуком клавы
@jarag9353
@jarag9353 3 жыл бұрын
Утька моя
@serhiisadrytskyi2970
@serhiisadrytskyi2970 6 жыл бұрын
Евгений, спасибо за полезное видео. Скажите, что имелось в виду под "добавлять любого разработчика в любую команду"(фраза в конце). - если вместо простого возвращения новых сущностей в переопределениях get-методов класса WebsiteTeamFactory(к примеру) написать логику выбора или же как в прмиере с "Фабрикой" добавить статичный метод который будет принимать строку и возвращать тип фабрики? Cпасибо.
@anjelomanoranjan3908
@anjelomanoranjan3908 4 ай бұрын
Браво, Женя! Крутое видео. Спасибо!
@EugeneSuleimanov
@EugeneSuleimanov 4 ай бұрын
Спасибо за поддержку!
@JGolt
@JGolt 2 жыл бұрын
Спасибо за урок! Жаль, что не показали UML диаграмму, обычно ее переношу в конспект и по ней потом ориентируюсь! У меня IDEA CE, в ней не посмотреть такое.
@Wanderer_D
@Wanderer_D 3 жыл бұрын
смотрю 4 видео. Объяснения четкие и внятные, без всяких "эээ.. ммм" и т. д.
@funenglish8128
@funenglish8128 3 жыл бұрын
все круто и понятно, но было бы круто если вы бы на примере показали почему нужно использовать данный паттерн и что может случится если его не использовать
@hannahr5037
@hannahr5037 7 жыл бұрын
Не подскажите, в чем разница этих двух фабрик от паттерна Простой Фабрики? В целях и практическом применении. Спасибо!
@EugeneSuleimanov
@EugeneSuleimanov 7 жыл бұрын
Абстрактная фабрика, грубо говоря - попытка создать группу фабрик.
@alexkhonko4115
@alexkhonko4115 4 жыл бұрын
в простой фабрике мы создаём все свои классы в одном методе. Фабричный метод говорит "пацаны, а давайте мы как нормальные люди вынесем эти кусочки кода отдельно, чтобы это дело можно было легко найти и проще читать", поэтому мы взываем на к фабрике, которая знает про всё, а к фабрике, которая знает, как создать конкретно нужный вам обьект. Абстрактная фабрика - совсем другая птица
@Andrzej3935
@Andrzej3935 Жыл бұрын
Большое спасибо, очень доступно
@EugeneSuleimanov
@EugeneSuleimanov Жыл бұрын
Спасибо за отзыв!
@goodman2156
@goodman2156 Жыл бұрын
А если в другом проекте мне нужен новый разработчик (например, сисадмин), а в старых фабриках ничего не менять, какой паттерн тогда применять? Или можно как-то модифицировать этот паттерн?
@user-qc5bi7zt7d
@user-qc5bi7zt7d 8 ай бұрын
Уровень подачи и понимания шаблонов 10 из 10. Объяснить проще уже не получится ни у кого))
@rustemiskakov2973
@rustemiskakov2973 2 жыл бұрын
Спасибо!
@michaelroyf4766
@michaelroyf4766 3 жыл бұрын
отлично!
@kostingy
@kostingy Жыл бұрын
Либо я что-то не так понял, либо здесь и в предыдущем видео не показана полная суть и смысл данных шаблонов и нарушен принцип сухого кода. Имхо у нас должен быть некий объект команды (с её типом и полями разраб тестер пм), а наша фабрика как раз генерирует команды и подсовывает в эти поля правильные сущности, завязанные на тип проекта. И в конце должен быть общий мэйн, где мы получаем две команды под проект каждого типа, а потом вызываем статик метод команд "делать проект"... В этом и есть смысл абстрактных фабрик - абстракция и сокрытие генерации правильных типов объектов, что бы в мэйне осталась только бизнесс-логика.
@Baannia
@Baannia 7 жыл бұрын
красивый и чоткий код
@user-mu2nu1iw3q
@user-mu2nu1iw3q 5 жыл бұрын
Прекрасная подача информации. Платные курсы и рядом не стояли..
@EugeneSuleimanov
@EugeneSuleimanov 5 жыл бұрын
Спасибо за отзыв, Виктор
@user-mu2nu1iw3q
@user-mu2nu1iw3q 5 жыл бұрын
@@EugeneSuleimanov всегда, пожалуйста. Не смотря на то, что программирую не первый год, паттерны как-то обходил стороной. Вот как-то пришлось заняться на днях. Можно и самому осилить, но с такими то примерами обучение становится комфортным и хочется это озвучить..) А причина проста. Такие каналы должны быть в ТОПе.
@yanlevchenko3870
@yanlevchenko3870 3 жыл бұрын
@@user-mu2nu1iw3q +++
@SiMoN-hk1jf
@SiMoN-hk1jf 3 жыл бұрын
Почему в классе BankingTeamFactory когда оверайдим метод getDeveloper пишем просто return new JavaDeveloper и не приводим к типу (Developer)?
@regondaadnoger4028
@regondaadnoger4028 3 жыл бұрын
Потому что JavaDeveloper уже реализован по интерфесу Developer
@user-ei2vj8jv9u
@user-ei2vj8jv9u 3 жыл бұрын
Гуглить: upcast
@johndoedoejohn
@johndoedoejohn Жыл бұрын
Дуже круті відео, дякую. :) Moжна також Project заімплементувати як Фабричний метод, цим самим інкапсулювати код від клієнта: public abstract class Project { protected String type; protected Developer developer; protected Tester tester; protected ProjectManager manager; public void startProject() { setUpTeam(); // Фабричний метод з субкласу System.out.println(String.format("Creating %s project. . .", type)); developer.writeCode(); tester.testCode(); manager.manageProject(); System.out.println(" "); } protected abstract void setUpTeam(); // Фабричний метод буде в субкласі } public class JavaProject extends Project { @Override protected void setUpTeam() { type = "Java"; AbstractFactory factory = new JavaProjectFactory(); developer = factory.createDeveloper(); tester = factory.createTester(); manager = factory.createProjectManager(); } } public class Company { public static void main(String[] args) { Project webProject = new WebProject(); webProject.startProject(); Project bankProject = new JavaProject(); bankProject.startProject(); } }
@EugeneSuleimanov
@EugeneSuleimanov Жыл бұрын
Дякую за відгук!
@user-cc9sn3bx4l
@user-cc9sn3bx4l 2 жыл бұрын
Так эта фабрика выдает набор обэктов - сгруппировали создание комманды в один класс и редактировать команду можно из одного места - ? В этом суть?
@user-on4ce8fg8s
@user-on4ce8fg8s 5 жыл бұрын
Почему называется абстрактная фабрика, когда это интерфейс ?
@lexxx1994
@lexxx1994 5 жыл бұрын
Так называется паттерн. Мы создали интерфейс фабрики, но т.к. интерфейс на самом деле - это полностью абстрактный класс, у которого все методы абстрактные (если мы говорим о Java), то можно сказать, что у нас есть какая то "абстрактная фабрика объектов", и реализаций этой "абстрактной фабрики" может быть сколько угодно.
@user-ev1me4xq8v
@user-ev1me4xq8v 4 жыл бұрын
@@sergeyinyakin9730 в том что тут мы выбираем фабрику под проект. А там мы выбирали фабрику под язык программирования. Как мне кажется разница в уровнях абстракции.
@user-ei2vj8jv9u
@user-ei2vj8jv9u 3 жыл бұрын
@@sergeyinyakin9730 дело не в абстракции как части языка, а в абстракции, как понятия. Ключевое слово abstract здесь совершенно не причем.
@user-ei2vj8jv9u
@user-ei2vj8jv9u 3 жыл бұрын
@@sergeyinyakin9730 значит, растёшь) когда поймешь, что уже не растёшь - пора менять профессию.
@jetbrain9115
@jetbrain9115 5 жыл бұрын
Спасибо! А UML диаграмму забыли(
@EugeneSuleimanov
@EugeneSuleimanov 5 жыл бұрын
Да, действительно ) Увидел только посое вашего комментария. Спасибо, что обратили внимание
@alexanderspreys176
@alexanderspreys176 Жыл бұрын
А что если в команде нет тестера? Возвращать эксепшен? Вроде как плохая практика.
@EugeneSuleimanov
@EugeneSuleimanov Жыл бұрын
Тестирование и эксепшн - несколько разные вещи. Исключение - это просто способ обработки ситуаций. А QA - это оценка качества продукта.
@AndreyDeveloper
@AndreyDeveloper 7 жыл бұрын
Все хорошо. Только опечатка (аСБтрактная фабрика).
@EugeneSuleimanov
@EugeneSuleimanov 7 жыл бұрын
Спасибо за сигнал. Исправил.
@AndreyDeveloper
@AndreyDeveloper 7 жыл бұрын
Да это тебе спасибо. Две книги прочитал и не вдуплял (и википедию тоже). А сейчас хоть какая-то ясность настает.
@volodya-nrg
@volodya-nrg 4 жыл бұрын
все таки не понятно чуть-чуть ... надо пристально следить за мыслью
@user-ug9ry8cf4o
@user-ug9ry8cf4o 5 ай бұрын
на php можно написать сайт, на java можно написать фабрику php разработчиков...
@EugeneSuleimanov
@EugeneSuleimanov 5 ай бұрын
И фабрику фабрик разработчиков…
@Novichek55
@Novichek55 9 ай бұрын
не понимаю я предназначение этих Шаблонов, ну создал бы я этих разработчиков и тестировщиков в методе mai() без Фабрики напрямую, что от этого бы изменилось??? Зачем нужна Фабрика ???🙃
@stealth9218
@stealth9218 3 ай бұрын
Смысл в том, у тебя получается гибкий код, поведение которого ты можешь настраивать при запуске, без переделки самого кода. Например, вместо отдельных классов со своими мейнами, можно было бы в основном мейне сделать switch, который бы принимал строку из args из параметров мейна и по ней бы вызывал нужную фабрику, которая бы уже собирала тебе нужную команду. Т.е. тебе для изменения поведения приложения достаточно запустить его с нужным параметром. При этом такую абстрактную фабрику легко расширять или изменять, добавляя новые команды, например. Если бы ты всех нужных сотрудников команды создавал бы через new() в мейне, то тебе бы было тяжело настраивать повделение приложения и еще сложнее его как-то изменять в дальнейшем. На практике такое может применяться, например, при описании разных конфигураций подключения к БД. Если все сделано правильно, например, по такому шаблону, то тип и параметры подключения у тебя могут задаваться в файле конфигурации, куда инсертятся через переменные окружения. И чтобы переключиться с одной БД на другую, тебе достаточно изменить значения в переменных окружения и перезапустить приложение. А в твоем случае тебе пришлось бы лезть в код и менять нужные объекты на новые во всех нужных местах, потом коммитить и деплоить изменения. И это не круто :)
@Valerii07
@Valerii07 4 жыл бұрын
Мдя я абстрагировался когда это все увидел, куча когда чтоб просто получить айди юзера, кажется все еще более запутанным чем простые ссылки к классам, абстрагируешься на каждом шаге то интерфейс то промежуточный класс чтоб только передать пас другому, еще больший клубок для распутывания, чем раньше... а так все хорошо объясняется...
@user-rl8fy6xe1t
@user-rl8fy6xe1t 3 жыл бұрын
В сложных проектах это поможет
@user-yv1zw4xz4d
@user-yv1zw4xz4d 2 жыл бұрын
Не очень понятна практическая применимость все равно
@neotremor5054
@neotremor5054 2 жыл бұрын
нифига ты быстро печатаешь...Пианист что ли?
@pie4928
@pie4928 Жыл бұрын
Зачем это учить ? Ведь можно и без них нормально разрабатывать приложения...
@EugeneSuleimanov
@EugeneSuleimanov Жыл бұрын
Да, конечно, это возможно, но местами при работе с большими системами это неудобно. Особенно, если не используются фреймворки, где эти шаблоны реализованы и используются "под капотом".
@alexanderryabinin2884
@alexanderryabinin2884 3 жыл бұрын
удар по клавишам будто показывает какую-то неприязнь, непорядок с нервами
@EugeneSuleimanov
@EugeneSuleimanov 3 жыл бұрын
Это я самоутверждаюсь и пытаюсь доминировать, хотя бы над клавиатурой. Это наполняет меня ощущением власти :)
@user-pd7kk1wi7r
@user-pd7kk1wi7r 3 жыл бұрын
@@EugeneSuleimanov Творчество не иссякаемое : хочу творю, а хочу - вытворяю! ))
@user-sn8jy8lg2j
@user-sn8jy8lg2j 7 жыл бұрын
Спасибо!
@EugeneSuleimanov
@EugeneSuleimanov 7 жыл бұрын
Пожалуйста, Сергей.
Шаблоны Java. Singleton (Одиночка)
5:10
Eugene Suleimanov
Рет қаралды 53 М.
Шаблоны Java. FactoryMethod (Фабричный метод)
12:22
Eugene Suleimanov
Рет қаралды 91 М.
1❤️#thankyou #shorts
00:21
あみか部
Рет қаралды 18 МЛН
Black Magic 🪄 by Petkit Pura Max #cat #cats
00:38
Sonyakisa8 TT
Рет қаралды 39 МЛН
The delivery rescued them
00:52
Mamasoboliha
Рет қаралды 8 МЛН
Фабричный метод
15:48
Volodya Mozhenkov
Рет қаралды 59 М.
Шаблоны Java. Посетитель (Visitor)
29:35
Vladimir Vysokomornyi
Рет қаралды 9 М.
Как работает PROXY в Java?
12:01
Nerzon
Рет қаралды 1,3 М.
Шаблоны Java. Visitor (Посетитель)
9:54
Eugene Suleimanov
Рет қаралды 14 М.
Шаблоны Java. Builder (Строитель)
10:58
Eugene Suleimanov
Рет қаралды 50 М.
Абстрактная Фабрика
12:06
Volodya Mozhenkov
Рет қаралды 35 М.
1❤️#thankyou #shorts
00:21
あみか部
Рет қаралды 18 МЛН