Допустим, у меня есть список, в котором перечислены объекты User. Базовый объект имеет методы:
final class User
{
private $id;
private $name;
public function __construct(string $id, string $name)
{
$this->id = $id;
$this->name = $name;
}
public function getId(): string
{
return $this->id;
}
public function getName(): string
{
return $this->name;
}
}
Но у меня есть исключительный список, который требует дополнительных данных для пользователя (поэтому я хотел бы добавить новые методы (новые функции - обратите внимание на последний класс) к этому объекту User ). Например, получение Phone - но я бы хотел сделать его гибким - позже я бы хотел добавить, например, другой метод (например, getFriends). Но я бы хотел выбрать, какие функции должны быть доступны в листинге - что-то вроде декоратора, но не полностью.
Как это сделать «по книге»? Шаблон декоратора здесь не подходит, потому что я меняю интерфейс объекта.
Может быть, мой подход неправильный, и я должен справиться с этим по-другому?