Паттерны проектирования для начинающих с примерами на PHP

แชร์
ฝัง
  • เผยแพร่เมื่อ 29 พ.ย. 2024

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

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

    🔥Промокод на скидку 15% на все курсы ITVDN - 4TH-cam
    Материалы вебинара - itvdn.com/ru/webinars/description/design-patterns-for-beginners-php?

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

    Фабричный метод подразумевает, что дочерние классы должны наследоваться от Creator и реализовывать метод создания сущности. На первой диаграмме, связанной с фабричным методом, видно, что должно быть два класса: CellPhoneCreator и SmartPhoneCreator. Вместо этого дальше в видео, создается просто класс с двумя методами, которые создают сущности CellPhone и SmartPhone.

  • @МихалИваныч
    @МихалИваныч 2 ปีที่แล้ว +4

    Очень доходчиво объясняешь. Спасибо большое.
    От себя добавил бы - вместе с паттернами надо объяснять принцип ООП (интерфейсы, полиморфизм и тд). На своём опыте понял, что изначально у меня было о последнем неверное представление. Я недогонял "за каким" нужны интерфейсы и абстрактные классы, если их приходится переписывать. Казалось, что это тупое наследования для расширения родительного класса.
    С шаблонами впервые столкнулся в книге Зандстра (вроде так зовут автора) и для меня это было каким-то космосом. Первый вопрос "это ещё что и нафиг оно нужно?" :)
    И только позже, столкнувшись с расширением своих приложений, дошло, что у меня что-то не так с архитектурой и, чтоб добавить что-то новое, надо половину переписывать.
    Так же надо объяснять простыми словами - какие задачи решает тот или иной шаблон. Иначе нифига не ясно.

  • @МихалИваныч
    @МихалИваныч 2 ปีที่แล้ว +6

    Чувак, проставь, пожалуйста, таймкоды.

  • @КоньковАндрей-в1ю
    @КоньковАндрей-в1ю 2 ปีที่แล้ว +1

    Больше всего мне "нравится", когда называют одним и тем же словом разные Методы ( function fly() в классе Duck и вызов Метода ->fly()...). По мне так Метод лучше назвать type_of_fly(), поскольку в него передается создание экземпляра конкретного класса И вызов метода fly(). Попробуйте после $this->flyBehavior->fly(); добавить $this->fly(); (55:47)

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

    Ох уж этот snake case...

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

    Почему синглттон не через статик метод и приватный конструктор?

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

      Если че, ожидал увидеть такое:
      class Singletone {
      private static $inst = null;
      private function __construct() {
      self::$inst = $this;
      }
      public static function shared() {
      return self::$inst ?? new static();
      }
      }
      class SomeClassA extends Singletone {
      public function say() { echo "Say A
      "; }
      }
      class SomeClassB extends Singletone {
      public function say() { echo "Say B
      "; }
      }

      SomeClassA::shared()->say();
      SomeClassB::shared()->say();
      var_dump(get_class( SomeClassA::shared()));
      var_dump(get_class( SomeClassB::shared()));
      $cls = new SomeClassA(); //cause error

    • @theice-r1o
      @theice-r1o 2 ปีที่แล้ว

      @@zitskycom Я вот тоже сижу и гадаю на этот счёт , откуда такая реализация у автора .....

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

      @@theice-r1o я спустя некоторое время вспомнил ещё круче способ. Через кортежи: trait SingletonTrait
      {
      private static $instance;
      public static function getInstance()
      {
      if (empty(self::$instance)) self::$instance = new static();
      return self::$instance;
      }
      private function __construct()
      {
      }
      private function __clone()
      {
      }
      private function __wakeup()
      {
      }
      }
      И можно будет оставить наследование для чего то более полезного ;)

    • @theice-r1o
      @theice-r1o 2 ปีที่แล้ว

      @@zitskycom Вроде раньше в кортежах была какая то проблема с модификаторами доступа если не ошибаюсь?

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

      @@theice-r1o я по крайней мере о таком не слышал, надо будет посмотреть

  • @ТимурСафаров-в1ч
    @ТимурСафаров-в1ч 10 หลายเดือนก่อน

    Хотелось бы видеть эти примеры в фреймах а не просто на голом коде

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

    Юзай автозагрузку, чтоб класс грузить с именем 123 из файла 123.php

  • @Tornado-ln7fq
    @Tornado-ln7fq 2 ปีที่แล้ว +4

    Не фига не понятно,но очень интересно)

  • @theice-r1o
    @theice-r1o 2 ปีที่แล้ว +1

    По мне пример стратегии , неверен , Стратегия это поведенческий паттерн , а значит поле $flyBehavior должно быть или публичным , или к нему надо ставить сеттер дабы была возможность его изменить из вне , интерфейс крайне неудачный , если реализация интерфейса должна подразумевать поведение объекта , почему бы не назвать к примеру IMovable c одним методом move() . Далле уже в стратегии мы просто делаем обкаст к интерфейсу а не к классу реализующим данный интерфейс к примеру
    class Animal{
    public $movable;
    public function __construct(IMovable $movable)
    {
    $this->movable = $movable
    }
    public function move()
    {
    $this->movable->move()
    }
    }
    class Duck extends Animal{}
    $animal = new Duck(new Fly());
    $animal->move();
    $animal->movable = new Run();
    $animal->move();
    В вашем примере просматривается зависимость в объектах и для создания других типов поведения вы будете вынуждены плодить интерфейсы для каждого отдельного типа поведения, это немного сбивает с толку

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

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

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

    Стратегия это не структурный, а поведенческий паттерн

  • @unnamed2288
    @unnamed2288 8 หลายเดือนก่อน

    7:00

    • @unnamed2288
      @unnamed2288 8 หลายเดือนก่อน

      7:58

    • @unnamed2288
      @unnamed2288 8 หลายเดือนก่อน

      11:55 если есть кто внимательный

    • @unnamed2288
      @unnamed2288 8 หลายเดือนก่อน

      14:24

    • @unnamed2288
      @unnamed2288 8 หลายเดือนก่อน

      18:30

    • @unnamed2288
      @unnamed2288 8 หลายเดือนก่อน

      24:30

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

    1

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

    Автор неправильно реализовал паттерн фабричный метод, получилось простая фабрика без ФАБРЧНОГО МЕТОДА

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

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

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

    когда учат не ZCE , а мидлы ....

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

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

  • @АлександрПетров-г8о1н
    @АлександрПетров-г8о1н 2 ปีที่แล้ว

    А литература?

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

    який жах