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

แชร์
ฝัง
  • เผยแพร่เมื่อ 20 ม.ค. 2025

ความคิดเห็น • 78

  • @мадам_пукина
    @мадам_пукина 8 ปีที่แล้ว +90

    чувствуется уровень. 90% остальных видео реально рядом не валялись - все четко, по делу, не отвлекаясь на простые вещи. Респект

    • @Тралфейс
      @Тралфейс ปีที่แล้ว +4

      Это сарказм?

    • @arctic9328
      @arctic9328 ปีที่แล้ว

      ты идиот?
      @@Тралфейс

    • @IbnSabilAbuAbdullah
      @IbnSabilAbuAbdullah 3 หลายเดือนก่อน

      @@Тралфейс Да нет. Он неплохо показывает основой принцип

  • @АндрейКазанцев-я2е
    @АндрейКазанцев-я2е 4 ปีที่แล้ว +90

    Для тех кто не понял, вот вам основное различие:
    Фабричный метод используется для создания только одного продукта
    Абстрактная фабрика - это создание семейств связанных или зависимых продуктов.

    • @arahnid_9844
      @arahnid_9844 ปีที่แล้ว +3

      Спасибо, я как раз это упустил)

    • @glookeemaska133
      @glookeemaska133 ปีที่แล้ว

      Легенда

  • @rufat85
    @rufat85 4 ปีที่แล้ว +45

    я не знаю как, кому, а мне данный формат видео лучше заходит. Это на основе древнего и первобытного, делай как я. Темп отличный. Лишнего нет. Да и всяких слов паразитов минимум.

  • @AdiletZhanysbay
    @AdiletZhanysbay 3 ปีที่แล้ว +6

    Очень понятно когда он показывает разницу паттернов. Уважуха братан✊

  • @БулатАшимов-и3с
    @БулатАшимов-и3с 3 ปีที่แล้ว +2

    Самое толковое и дельное объяснение абстрактных фабрик... Без воды и бессмысленного прыгания у доски и калякания всяких идиотских картинок. Почти парное программирование. Огромный респект

  • @Lineage2GF
    @Lineage2GF 6 ปีที่แล้ว +2

    Столько всего прочел пересмотрел и никак не понимал до просмотра этого видео. Спасибо !

  • @faniskhalikov9736
    @faniskhalikov9736 4 ปีที่แล้ว +5

    Спасибо за качественный урок) Отличный материал для начинающих и не только, лучше начинаешь понимать необходимость применения интерфейсов.

  • @СэмФишер-х4д
    @СэмФишер-х4д 3 ปีที่แล้ว +1

    отличный урок. четко и понятно показан шаблон и как работает. спасибо!

  • @elpirato5428
    @elpirato5428 4 ปีที่แล้ว +4

    Хорошо когда без ошибок всю информацию сразу в правильном порядке преподносят, сразу все в памяти откладывается.

  • @IbnSabilAbuAbdullah
    @IbnSabilAbuAbdullah 3 หลายเดือนก่อน

    Спасибо! Годное видео! На обычной фабрике пример был не очень, и мне пришлось посмотреть другой ролик по этой теме)), но про абстрактную фабрику - определённо топ)

    • @EugeneSuleimanov
      @EugeneSuleimanov  3 หลายเดือนก่อน

      @@IbnSabilAbuAbdullah спасибо за отзыв!

  • @Maratreason
    @Maratreason 8 ปีที่แล้ว +2

    Супер, тоже респект!!! Все четко и понятно.

  • @LAZIO14
    @LAZIO14 11 หลายเดือนก่อน

    Браво, Женя! Крутое видео. Спасибо!

    • @EugeneSuleimanov
      @EugeneSuleimanov  11 หลายเดือนก่อน +1

      Спасибо за поддержку!

  • @anymko3931
    @anymko3931 4 ปีที่แล้ว +15

    Очень нравится как звучит клава, обычно звук ацтой, а тут я бывает заслушиваюсь больше над звуком клавы

    • @jarag9353
      @jarag9353 4 ปีที่แล้ว +1

      Утька моя

  • @Wanderer_D
    @Wanderer_D 3 ปีที่แล้ว +1

    смотрю 4 видео. Объяснения четкие и внятные, без всяких "эээ.. ммм" и т. д.

  • @Spothoax
    @Spothoax ปีที่แล้ว +1

    Уровень подачи и понимания шаблонов 10 из 10. Объяснить проще уже не получится ни у кого))

  • @funenglish8128
    @funenglish8128 3 ปีที่แล้ว +2

    все круто и понятно, но было бы круто если вы бы на примере показали почему нужно использовать данный паттерн и что может случится если его не использовать

  • @JGolt
    @JGolt 3 ปีที่แล้ว +6

    Спасибо за урок!
    Жаль, что не показали UML диаграмму, обычно ее переношу в конспект и по ней потом ориентируюсь! У меня IDEA CE, в ней не посмотреть такое.

  • @Andrzej3935
    @Andrzej3935 2 ปีที่แล้ว

    Большое спасибо, очень доступно

  • @johndoedoejohn
    @johndoedoejohn 2 ปีที่แล้ว +1

    Дуже круті відео, дякую. :) 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();
    }
    }

  • @hannahr5037
    @hannahr5037 8 ปีที่แล้ว +7

    Не подскажите, в чем разница этих двух фабрик от паттерна Простой Фабрики? В целях и практическом применении. Спасибо!

    • @EugeneSuleimanov
      @EugeneSuleimanov  8 ปีที่แล้ว +10

      Абстрактная фабрика, грубо говоря - попытка создать группу фабрик.

    • @alexkhonko4115
      @alexkhonko4115 5 ปีที่แล้ว +2

      в простой фабрике мы создаём все свои классы в одном методе. Фабричный метод говорит "пацаны, а давайте мы как нормальные люди вынесем эти кусочки кода отдельно, чтобы это дело можно было легко найти и проще читать", поэтому мы взываем на к фабрике, которая знает про всё, а к фабрике, которая знает, как создать конкретно нужный вам обьект. Абстрактная фабрика - совсем другая птица

  • @kostingy
    @kostingy 2 ปีที่แล้ว +1

    Либо я что-то не так понял, либо здесь и в предыдущем видео не показана полная суть и смысл данных шаблонов и нарушен принцип сухого кода. Имхо у нас должен быть некий объект команды (с её типом и полями разраб тестер пм), а наша фабрика как раз генерирует команды и подсовывает в эти поля правильные сущности, завязанные на тип проекта. И в конце должен быть общий мэйн, где мы получаем две команды под проект каждого типа, а потом вызываем статик метод команд "делать проект"... В этом и есть смысл абстрактных фабрик - абстракция и сокрытие генерации правильных типов объектов, что бы в мэйне осталась только бизнесс-логика.

  • @goodman2156
    @goodman2156 2 ปีที่แล้ว

    А если в другом проекте мне нужен новый разработчик (например, сисадмин), а в старых фабриках ничего не менять, какой паттерн тогда применять? Или можно как-то модифицировать этот паттерн?

  • @serhiisadrytskyi2970
    @serhiisadrytskyi2970 6 ปีที่แล้ว +1

    Евгений, спасибо за полезное видео. Скажите, что имелось в виду под "добавлять любого разработчика в любую команду"(фраза в конце). - если вместо простого возвращения новых сущностей в переопределениях get-методов класса WebsiteTeamFactory(к примеру) написать логику выбора или же как в прмиере с "Фабрикой" добавить статичный метод который будет принимать строку и возвращать тип фабрики? Cпасибо.

  • @ВикторДемихов-ц9о
    @ВикторДемихов-ц9о 5 ปีที่แล้ว +1

    Прекрасная подача информации. Платные курсы и рядом не стояли..

    • @EugeneSuleimanov
      @EugeneSuleimanov  5 ปีที่แล้ว

      Спасибо за отзыв, Виктор

    • @ВикторДемихов-ц9о
      @ВикторДемихов-ц9о 5 ปีที่แล้ว

      @@EugeneSuleimanov всегда, пожалуйста. Не смотря на то, что программирую не первый год, паттерны как-то обходил стороной. Вот как-то пришлось заняться на днях. Можно и самому осилить, но с такими то примерами обучение становится комфортным и хочется это озвучить..) А причина проста. Такие каналы должны быть в ТОПе.

    • @yanlevchenko3870
      @yanlevchenko3870 4 ปีที่แล้ว

      @@ВикторДемихов-ц9о +++

  • @michaelroyf4766
    @michaelroyf4766 3 ปีที่แล้ว

    отлично!

  • @Vod-b4n
    @Vod-b4n 3 ปีที่แล้ว

    Так эта фабрика выдает набор обэктов - сгруппировали создание комманды в один класс и редактировать команду можно из одного места - ? В этом суть?

  • @СергейСтепанов-ч4б9т
    @СергейСтепанов-ч4б9т 8 ปีที่แล้ว

    Спасибо!

  • @SiMoN-hk1jf
    @SiMoN-hk1jf 4 ปีที่แล้ว

    Почему в классе BankingTeamFactory когда оверайдим метод getDeveloper пишем просто
    return new JavaDeveloper и не приводим к типу (Developer)?

  • @alexanderspreys176
    @alexanderspreys176 ปีที่แล้ว

    А что если в команде нет тестера? Возвращать эксепшен? Вроде как плохая практика.

    • @EugeneSuleimanov
      @EugeneSuleimanov  ปีที่แล้ว

      Тестирование и эксепшн - несколько разные вещи. Исключение - это просто способ обработки ситуаций. А QA - это оценка качества продукта.

  • @Baannia
    @Baannia 7 ปีที่แล้ว

    красивый и чоткий код

  • @ПоликарпГазов-ы1м
    @ПоликарпГазов-ы1м 6 ปีที่แล้ว +1

    Почему называется абстрактная фабрика, когда это интерфейс
    ?

    • @lexxx1994
      @lexxx1994 6 ปีที่แล้ว

      Так называется паттерн. Мы создали интерфейс фабрики, но т.к. интерфейс на самом деле - это полностью абстрактный класс, у которого все методы абстрактные (если мы говорим о Java), то можно сказать, что у нас есть какая то "абстрактная фабрика объектов", и реализаций этой "абстрактной фабрики" может быть сколько угодно.

    • @rufat85
      @rufat85 4 ปีที่แล้ว

      @@sergeyinyakin9730 в том что тут мы выбираем фабрику под проект. А там мы выбирали фабрику под язык программирования. Как мне кажется разница в уровнях абстракции.

    • @ЕвгенийКарпов-п3д
      @ЕвгенийКарпов-п3д 3 ปีที่แล้ว

      @@sergeyinyakin9730 дело не в абстракции как части языка, а в абстракции, как понятия. Ключевое слово abstract здесь совершенно не причем.

    • @ЕвгенийКарпов-п3д
      @ЕвгенийКарпов-п3д 3 ปีที่แล้ว

      @@sergeyinyakin9730 значит, растёшь) когда поймешь, что уже не растёшь - пора менять профессию.

  • @volodya-nrg
    @volodya-nrg 5 ปีที่แล้ว +1

    все таки не понятно чуть-чуть ... надо пристально следить за мыслью

  • @jetbrain9115
    @jetbrain9115 5 ปีที่แล้ว +1

    Спасибо! А UML диаграмму забыли(

    • @EugeneSuleimanov
      @EugeneSuleimanov  5 ปีที่แล้ว

      Да, действительно ) Увидел только посое вашего комментария. Спасибо, что обратили внимание

  • @СергейПанаев-ы3у
    @СергейПанаев-ы3у ปีที่แล้ว

    на php можно написать сайт, на java можно написать фабрику php разработчиков...

    • @EugeneSuleimanov
      @EugeneSuleimanov  ปีที่แล้ว

      И фабрику фабрик разработчиков…

  • @Novichek55
    @Novichek55 ปีที่แล้ว

    не понимаю я предназначение этих Шаблонов, ну создал бы я этих разработчиков и тестировщиков в методе mai() без Фабрики напрямую, что от этого бы изменилось??? Зачем нужна Фабрика ???🙃

    • @stealth-350
      @stealth-350 10 หลายเดือนก่อน

      Смысл в том, у тебя получается гибкий код, поведение которого ты можешь настраивать при запуске, без переделки самого кода. Например, вместо отдельных классов со своими мейнами, можно было бы в основном мейне сделать switch, который бы принимал строку из args из параметров мейна и по ней бы вызывал нужную фабрику, которая бы уже собирала тебе нужную команду. Т.е. тебе для изменения поведения приложения достаточно запустить его с нужным параметром. При этом такую абстрактную фабрику легко расширять или изменять, добавляя новые команды, например. Если бы ты всех нужных сотрудников команды создавал бы через new() в мейне, то тебе бы было тяжело настраивать повделение приложения и еще сложнее его как-то изменять в дальнейшем.
      На практике такое может применяться, например, при описании разных конфигураций подключения к БД. Если все сделано правильно, например, по такому шаблону, то тип и параметры подключения у тебя могут задаваться в файле конфигурации, куда инсертятся через переменные окружения. И чтобы переключиться с одной БД на другую, тебе достаточно изменить значения в переменных окружения и перезапустить приложение. А в твоем случае тебе пришлось бы лезть в код и менять нужные объекты на новые во всех нужных местах, потом коммитить и деплоить изменения. И это не круто :)

  • @AndreyDeveloper
    @AndreyDeveloper 8 ปีที่แล้ว

    Все хорошо. Только опечатка (аСБтрактная фабрика).

    • @EugeneSuleimanov
      @EugeneSuleimanov  8 ปีที่แล้ว +1

      Спасибо за сигнал.
      Исправил.

    • @AndreyDeveloper
      @AndreyDeveloper 8 ปีที่แล้ว +5

      Да это тебе спасибо. Две книги прочитал и не вдуплял (и википедию тоже). А сейчас хоть какая-то ясность настает.

  • @Valerii07
    @Valerii07 5 ปีที่แล้ว +1

    Мдя я абстрагировался когда это все увидел, куча когда чтоб просто получить айди юзера, кажется все еще более запутанным чем простые ссылки к классам, абстрагируешься на каждом шаге то интерфейс то промежуточный класс чтоб только передать пас другому, еще больший клубок для распутывания, чем раньше... а так все хорошо объясняется...

  • @АлександрУсенко-ж8б
    @АлександрУсенко-ж8б 2 ปีที่แล้ว

    Не очень понятна практическая применимость все равно

  • @neotremor5054
    @neotremor5054 2 ปีที่แล้ว +1

    нифига ты быстро печатаешь...Пианист что ли?

  • @pie4928
    @pie4928 ปีที่แล้ว

    Зачем это учить ? Ведь можно и без них нормально разрабатывать приложения...

    • @EugeneSuleimanov
      @EugeneSuleimanov  ปีที่แล้ว +1

      Да, конечно, это возможно, но местами при работе с большими системами это неудобно. Особенно, если не используются фреймворки, где эти шаблоны реализованы и используются "под капотом".

  • @alexanderryabinin2884
    @alexanderryabinin2884 4 ปีที่แล้ว

    удар по клавишам будто показывает какую-то неприязнь, непорядок с нервами

    • @EugeneSuleimanov
      @EugeneSuleimanov  4 ปีที่แล้ว +22

      Это я самоутверждаюсь и пытаюсь доминировать, хотя бы над клавиатурой. Это наполняет меня ощущением власти :)

    • @Валерий-н6м6г
      @Валерий-н6м6г 3 ปีที่แล้ว +1

      @@EugeneSuleimanov Творчество не иссякаемое : хочу творю, а хочу - вытворяю! ))

  • @rustemiskakov2973
    @rustemiskakov2973 3 ปีที่แล้ว

    Спасибо!