Какой шаблон дизайна это может быть? - PullRequest
2 голосов
/ 09 ноября 2011

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

/ edit /

Ниже приведен псевдокод 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 Ответ

3 голосов
/ 09 ноября 2011

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...