Каким шаблоном дизайна это может быть?

#design-patterns #software-design

#шаблоны проектирования #программное обеспечение-дизайн

Вопрос:

У меня есть класс, который при передаче идентификатора становится /proxies / mimicks / works with / оборачивает экземпляр на основе этого уникального идентификатора, но мы можем передать ему новый идентификатор $obj->become($id); , и он изменит свое внутреннее состояние для работы с этим экземпляром объекта вместо этого. Как называется этот шаблон проектирования?

/редактировать/

Ниже приведен псевдокод php … это суть шаблона, который я продолжаю видеть.

 class ObjectPoolManager{
    protected $objectPool;
    protected $currentlyManagedObject=null;

    public function become($id){
        //... searching $objectPool for $objectSpecifiedByIdParameter ...
        $this->currentlyManagedObject = $objectSpecifiedByIdParameter;
    }

    /*
    * All calls to the manager are delegated to the managed object
    */
    public __call($name,$arguments){
        return call_user_func_array(array($this->currentlyManagedObject, $name),$arguments);
    }
}
  

Комментарии:

1. Это может быть шаблон проектирования состояния, но вам следует опубликовать некоторый код. В противном случае, это всего лишь предположение.

2. Пожалуйста, опубликуйте некоторый код, который показывает обернутый объект, объект-оболочку и их взаимодействие.

3. Похоже на что-то отличное от того, что я видел раньше… не уверен, как это называется, но это определенный повторяющийся шаблон. Такое ощущение, что он должен называться «менеджер делегирования», «прокси-сервер делегирования», «менеджер пула объектов» …. похоже на итератор… я думаю о том, как adodb переносит строки из набора записей… не уверен, что это такое.

Ответ №1:

Часто шаблон зависит от намерения в той же степени, что и от реализации.

В этом случае состояние возможно, если целью этого класса является представление набора операций, реализация которых отличается в зависимости от его логического состояния (отсюда и название).

Стратегия также возможна, если целью become является явное переключение алгоритма (аналогично выбору процедуры сжатия для использования при последующем вызове Compress).

Если цель состоит в том, чтобы объединить множество экземпляров без состояния (что означает экземпляры объектов без данных) таким образом, чтобы их можно было совместно использовать и, следовательно, уменьшить количество объектов в памяти, то это может быть избыточным весом.

И, конечно, представленный здесь уровень косвенности является формой прокси.

Расскажите нам, в чем заключается намерение кода, и мы все сможем предоставить лучшую обратную связь.

Комментарии:

1. Намерение того же типа, что и у итератора набора записей adodb, за исключением того, что мы можем выбрать определенный элемент в наборе записей для имитации / переноса / прокси … я думаю, прокси имеет наибольший смысл…