#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, за исключением того, что мы можем выбрать определенный элемент в наборе записей для имитации / переноса / прокси … я думаю, прокси имеет наибольший смысл…