Страница 1 из 1

Паттерны проектирования

Добавлено: 2019.09.30, 11:40
nulled
Приветствую, только начал разбираться с паттернами, поднялся вопрос все ли правильно я делаю?

Код: Выделить всё

<?php

interface interfaceClassAB
{
    public function callFunction();
}

class A
{
    public function functionClassA()
    {
        echo "functionClassA";
    }
}

class B
{
    public function functionClassB()
    {
        echo "functionClassB";
    }
}

class adapterA implements interfaceClassAB
{
    public function callFunction()
    {
         (new A())->functionClassA();
    }
}

class adapterB implements interfaceClassAB
{
    public function callFunction()
    {
        (new B())->functionClassB();
    }
}

class finalClass
{
    public function __construct(int $id)
    {
        if ($id == 1){
            (new adapterA())->callFunction();
        }else{
            (new adapterB())->callFunction();
        }
    }
}


new finalClass(1);
echo "</br>";
new finalClass(2);

Re: Паттерны проектирования

Добавлено: 2019.09.30, 12:37
ElisDN
Объекты классов A и B передавайте адаптерам в конструктор.

Вместо echo возвращайте результат через return.

Нет объекта, который принимает интерфейс.

Последний класс с конструктором бесполезен.

Re: Паттерны проектирования

Добавлено: 2019.10.02, 10:49
nulled
Спасибо за ответ!

1) Нет объекта, который принимает интерфейс.
Если классы А и Б - это классы с произвольным набором методов, применить к ним интерфейс мы не можем, т.к. обновление этих классов все затрет. Поэтому интерфейс применить к адаптерам, верно?

2) Последний класс с конструктором бесполезен.
Если убрать последний класс, то как будет определяться какой адаптер вызывать?

Re: Паттерны проектирования

Добавлено: 2019.10.02, 12:39
ElisDN
1) Если интерфейс никто не использует, то он и не нужен. Если интерфейс убрать, то ничего в вашем коде не сломается.

2) Замените конструктор последнего класса на простой статический или динамический метод.