这可能是什么设计模式?

时间:2011-11-08 21:13:17

标签: design-patterns software-design

我有一个类,当传递一个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);
    }
}

1 个答案:

答案 0 :(得分:3)

该模式通常依赖于意图,与实施相同。

在这种情况下,如果此类的意图是表示一组操作,这些操作的实现因其逻辑状态(因此名称)而不同,则可以使用State。

如果become的意图是显式切换算法(类似于选择在后续的Compress调用中使用的压缩例程),也可以使用策略。

如果意图是汇集numreous无状态(意味着没有数据的对象实例),以便它们可以共享,从而减少内存中的对象数量,那么这可能是一个Flyweight。

当然,这里表示的间接层是代理的一种形式。

告诉我们代码的意图是什么,我们都可以提供更好的反馈。