Заставить классы реализовать один из методов

Допустим, мне нужна группа классов для реализации все методы X, Y и Z для правильной работы. В этом случае я могу позволить им реализовать общий интерфейс, чтобы форсировать это.

Теперь мой случай немного отличается — мои классы должны быть реализованы по крайней мере, один из X, Y и Z, не обязательно все из них. Интерфейсы не могут помочь мне здесь. Самая близкая вещь, о которой я могу думать, — это общий родитель — он может проверить существование X, Y или Z в своей конструкции.

Я бы предпочел избежать здесь наследования, потому что мне может понадобиться реализовать этот «интерфейс» в классе, у которого уже есть родитель. Итак, есть ли другой элегантный способ сделать это?

(Я работаю в PHP, но если существует общее ООП-решение, оно может служить более широкой аудитории.)

0

Решение

Я бы предпочел избежать здесь наследования, потому что мне может понадобиться реализовать этот «интерфейс» в классе, у которого уже есть родитель. Итак, есть ли другой элегантный способ сделать это?

Если я вас правильно понял, вы можете решить эту проблему через Черты:

trait DefaultImpl
{
public function x()
{
echo "Default implementation of x()\n";
}

public function y()
{
echo "Default implementation of y()\n";
}

public function z()
{
echo "Default implementation of z()\n";
}
}

class XImpl
{
use DefaultImpl;

public function x()
{
echo "Custom implementation of X\n";
}
}

$x = new XImpl();
$x->x();
$x->y();
$x->z();

Это не очень хорошее решение с точки зрения дизайна. Но это лучше, чем ненужное наследование.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]