Паттерн «Абстрактная фабрика» на примере Factorio | Как упростить код в программировании

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

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

  • @Insufficnt
    @Insufficnt 13 ชั่วโมงที่ผ่านมา +3

    Когда учишься на проге и играешь в факторио, а ютуб подсовывает это... Наслаждению нет предела, контент пушка

  • @AntiVIRUZ2
    @AntiVIRUZ2 9 ชั่วโมงที่ผ่านมา +6

    Это не абстрактная фабрика. В вашей демонстрации в факторио изменяется только один "компонент" - на выходе завода получаются то пластины, то двигатели, то провода. Суть же абстрактной фабрики в том, что выход фабрики - это несколько классов, каждый из которых является наследником своего интерфейса. Примером абстрактной фабрики могли бы быть книжки со всеми чертежами для производства колб. С одними и теми же выходами (это важно!). В первой книжке используются синие заводы, во втором - зеленые, а в третьем - зеленые с маяками и модулями. Получается, что каждая из книжек - это отдельная фабрика. Каждый чертеж - объект. Так как входы и выходы для каждого типа колб в разных книжках одинаковые, то они как бы наследуются от одного и того же интерфейса (то есть у каждых красных колб - одни и те же входы и выходы одинаково расположенные). Но и то, пример с натяжкой
    Пример же показанный в видео не подходит ни под один паттерн проектирования, потому что Вы просто заменяете один "класс" на другой, у которого даже другой выход. Это даже под наследование не подходит, потому что нарушает принцип Лисков.
    Это вообще сложный для понимания и использования паттерн, программист может ни разу в жизни его не использовать)

    • @Just-York
      @Just-York  8 ชั่วโมงที่ผ่านมา +3

      Спасибо большое за развёрнутый комментарий! Вы абсолютно правы в том, что реализация «абстрактной фабрики» в реальных проектах гораздо глубже, чем просто «поменяли выход завода». Мой пример с Factorio был скорее упрощённой метафорой: хотел показать саму идею «меняем внутреннюю начинку - интерфейс остаётся прежним», чтобы новичкам было легче это понять на знакомом примере. Конечно, если разбирать классический паттерн «Абстрактная фабрика» по канону, там речь идёт о целой группе родственных объектов, наследующихся от общих интерфейсов.
      То, о чём вы говорите в примере с «книжками чертежей», действительно ближе к классике паттерна: несколько разных «наборов» с одинаковой структурой входов-выходов, но разным наполнением (синие/зелёные заводы, модули и так далее). Это хороший и более «каноничный» пример абстрактной фабрики, когда у нас есть несколько связанных классов, которые нужно порождать «набором».
      Согласен, что этот паттерн не самый простой и далеко не всегда необходим в повседневной работе. Но порой, когда проект растёт и объектов становится много, абстрактная фабрика спасает от хаоса.
      Спасибо, что дополнили ролик разъяснением и поделились своим взглядом! Уверен, многим будет полезно увидеть ещё один пример, показывающий, как именно работает «настоящая» абстрактная фабрика и почему тема действительно сложнее, чем кажется на первый взгляд.

  • @РусланУшаков-б5л
    @РусланУшаков-б5л 12 ชั่วโมงที่ผ่านมา +6

    Абстрактная фабрика - это фабрика фабрик, то есть фабрика, которая возвращает другие (конкретные) фабрики. Если натягивать это на факторио, то это завод, который выпускает другие (разные) заводы, которые выпускают продукты. При этом выпускаемые заводы для разных продукций (шестеренки, пластины, кирпичи)

    • @sungvin
      @sungvin 10 ชั่วโมงที่ผ่านมา

      Хорошо определил, можно считать производные фабрики - чертежами допустим отдельной сборной линии шестеренок с 15ью сборщиками

    • @Тед-е8ы
      @Тед-е8ы 10 ชั่วโมงที่ผ่านมา +2

      Абстрактная фабрика в факторио это ты но скорее уже godobject

    • @durema9720
      @durema9720 9 ชั่วโมงที่ผ่านมา

      Завод чье производство уходит в расширение обьема производства и для создания еще большено расширение завода засчет завода.

  • @game15098
    @game15098 9 ชั่วโมงที่ผ่านมา

    То чувство когда самостоятельно дошел до данной концепции и в проге и в факторио. Спасибо за подробный разбор этих идей.

  • @NETstalker0xFFF
    @NETstalker0xFFF 17 ชั่วโมงที่ผ่านมา +1

    Спасибо за видео! ООП стало чуть понятнее ))

  • @pumpliesyt5906
    @pumpliesyt5906 15 ชั่วโมงที่ผ่านมา

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

  • @Leonard_Gray
    @Leonard_Gray 16 ชั่วโมงที่ผ่านมา +2

    5:36 Ооо, это мой метод! Но не совсем так: лучше заняться разработкой системы, которая непосредственно встраивает специи в организм, сразу как только считывает характерные для необходимости просить передать соль поведенческие паттерны.
    Захотел попросить передать соль? Как вдруг ХОБА! А она сама тебе мгновенно прилетает!
    Автоматизация! \(⌒∇⌒)/

  • @universearc2507
    @universearc2507 16 ชั่วโมงที่ผ่านมา

    Спасибо большое за труды! Very valuable! ❤🎉

  • @Sus-ov8nv
    @Sus-ov8nv 16 ชั่วโมงที่ผ่านมา +1

    4:33 выглядит точно так же, когда ты рассказывал про принцип закрытости, типа перестраивание фабрики похожим образом это нарушение принципа закрытости...

    • @Just-York
      @Just-York  16 ชั่วโมงที่ผ่านมา +2

      не совсем :) это 2 разных цеха. 1й производит пластины из руды, 2й производит проволку из руды

    • @Sus-ov8nv
      @Sus-ov8nv 14 ชั่วโมงที่ผ่านมา

      @Just-York получается, смысл в том, что при нарушении закрытости мы перестраиваем то, что внутри завода, а здесь мы делаем новый завод, который имеет такие же ресурсы на входе но у которого другая функция, при этом, внутренности первого не меняются?

    • @Just-York
      @Just-York  14 ชั่วโมงที่ผ่านมา +1

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

  • @plazmius
    @plazmius 16 ชั่วโมงที่ผ่านมา +1

    Проблема это продумать когда и задача до конца не понятна и приходится на ходу добавлять входы выходы

  • @Dodzai
    @Dodzai 7 ชั่วโมงที่ผ่านมา +1

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

  • @Тед-е8ы
    @Тед-е8ы 10 ชั่วโมงที่ผ่านมา +1

    Факторио даёт очень близким паттерны поведения с программированием и хороший факторщик быстрее разберёться с патронами программирования и наоборот. Но он хоть и близки и чувствуются похоже работать с ними нужно по разному. Я не против того что вы называете что-то чем-то. Но на концепции фактории решения из программирования не работают в полной мере. Например принцип dry воще не функционирует на поздних этапах игры потому что снести что-то и поставить что-то огромное очень просто. Я бы ёщо аргументировал почему абстрактную фабрику нельзя объяснять на примере факторио но мне лень писать.

    • @Тед-е8ы
      @Тед-е8ы 10 ชั่วโมงที่ผ่านมา +1

      Это скорее ролик про абстракции интерфейсы но не фабрика

    • @Just-York
      @Just-York  9 ชั่วโมงที่ผ่านมา

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

    • @Тед-е8ы
      @Тед-е8ы 9 ชั่วโมงที่ผ่านมา

      @@Just-York как я сказал это неплохо если это поможет кому-то но из за особенностей игры их можно не правильно истолковать хотя это в принципе особенность паттернов программирования. Их почти невозможно понять без гигантского багажа знаний и опыта .

  • @Dodzai
    @Dodzai 7 ชั่วโมงที่ผ่านมา

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

  • @SD-ez6nw
    @SD-ez6nw 15 ชั่วโมงที่ผ่านมา

    Не играл в satisfactory, но 6/12 -> 1 выглядит более выгодным по ресурсам, чем 18/50 -> 3, если 3 завода с первым рецептом построить не сложнее, чем 1 завод со вторым. В чем фокус?

    • @Just-York
      @Just-York  14 ชั่วโมงที่ผ่านมา

      там подписано справа. Выгода в скорости. В первом случае - 5 пластин в минуту, во втором - 15 в минуту. Там ресурсы безконечные, поэтому скорость производства там важнее

    • @SD-ez6nw
      @SD-ez6nw 14 ชั่วโมงที่ผ่านมา

      @@Just-York тогда понял) Спс, видео приятное, посмотрел с удовольствием!

    • @ОбычныйЧеловек-щ7м
      @ОбычныйЧеловек-щ7м 9 ชั่วโมงที่ผ่านมา

      @@Just-York В factorio space age ресурсы тоже бесконечные. За исключением урана, гольмия и одной из жидкости на аквилло, которые конечны. И то, исследование на продуктивность добычи не требует ни один из конечных ресурсов, имея бесконечное количество времени возможно довести продуктивность до таких величин, что и ограниченность ресурсов фульгоры и аквилло не будут иметь значения.

    • @Just-York
      @Just-York  8 ชั่วโมงที่ผ่านมา

      @@ОбычныйЧеловек-щ7м я больше говорил про класику, но хорошее замечание!)

  • @monstertruck1705
    @monstertruck1705 4 ชั่วโมงที่ผ่านมา +1

    Дизлайк за натягивание совы на глобус. Рассказываете про абстрактную фабрику, а показываете обычную инкапсуляцию. Если и хотели что то этакое показать, то могли на примере чертежей изобразить, ну или над моллом поплясать. Новичков только путаете

  • @MIROSXWBR
    @MIROSXWBR 17 ชั่วโมงที่ผ่านมา +1

    опа, годнота