我有一个类,当传递一个id成为/ proxies / mimicks /使用/包装一个基于该唯一id的实例,但是我们可以传递一个新的id $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);
}
}
答案 0 :(得分:3)
该模式通常依赖于意图,与实施相同。
在这种情况下,如果此类的意图是表示一组操作,这些操作的实现因其逻辑状态(因此名称)而不同,则可以使用State。
如果become
的意图是显式切换算法(类似于选择在后续的Compress调用中使用的压缩例程),也可以使用策略。
如果意图是汇集numreous无状态(意味着没有数据的对象实例),以便它们可以共享,从而减少内存中的对象数量,那么这可能是一个Flyweight。
当然,这里表示的间接层是代理的一种形式。
告诉我们代码的意图是什么,我们都可以提供更好的反馈。