Гибкое добавление новых функций в базовый объект - PullRequest
0 голосов
/ 26 мая 2020

Допустим, у меня есть список, в котором перечислены объекты 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). Но я бы хотел выбрать, какие функции должны быть доступны в листинге - что-то вроде декоратора, но не полностью.

Как это сделать «по книге»? Шаблон декоратора здесь не подходит, потому что я меняю интерфейс объекта.

Может быть, мой подход неправильный, и я должен справиться с этим по-другому?

...