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

Обсуждаем, как правильно строить приложения
Ответить
nulled
Сообщения: 74
Зарегистрирован: 2018.10.30, 13:42

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

Сообщение 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);
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

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

Сообщение ElisDN »

Объекты классов A и B передавайте адаптерам в конструктор.

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

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

Последний класс с конструктором бесполезен.
nulled
Сообщения: 74
Зарегистрирован: 2018.10.30, 13:42

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

Сообщение nulled »

Спасибо за ответ!

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

2) Последний класс с конструктором бесполезен.
Если убрать последний класс, то как будет определяться какой адаптер вызывать?
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

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

Сообщение ElisDN »

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

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