不同的基本对象过程使用什么设计模式

what design pattern to use for different base object procedures

本文关键字:什么 设计模式 过程 对象      更新时间:2023-10-16

我想写一个可以扩展的库。以下是一个粗略的代码大纲:

class Object
{
    ActionProc* pAP;
};    
class Sphere : public Object;
class Point : public Object;
class ActionProc
{
    virtual Action( Object* ) = 0;         
};
class ActionProcMove : public ActionProc
{
    bool m_bCanMove;     
    virtual Action( Object* obj )
    {
        if( m_bCanMove )
        {
             //do some moving stuff
        }
    }; 
};

这个库的用户可能会这样扩展它:(再一次,只是一个代码大纲)

class ActionProcSize : public ActionProc
{
    bool m_bCanSize;     
    virtual Action( Object* obj )
    {
        if( m_bCanSize)
        {
             //do some sizing stuff
        }
    }; 
};

虽然这是可行的,但这意味着我必须为我创建的每个对象创建一个makea过程对象。相反,我更愿意为所有需要该类型过程的对象只创建一个过程对象。

换句话说,我需要一个地方来存储链接到对象的过程所需的额外变量。

请注意,这不是实际的代码,只是一个示例

如果您想避免添加具有默认行为的ActionProc,您可以指向具有此行为的全局(希望是无状态)ActionProc。您可以覆盖继承的类,也可以通过在构造函数中传递ActionProc来覆盖非默认行为。

BTW:您的代码类似于GOF的桥梁设计模式。

您可能需要考虑将状态存储在对象本身中。

class Object {
  std::map<UINT32 id, bool variable> mBoolStates;
  std::map<UINT32 id, UINT32 variable> mUINTStates;
  ActionProc* pAP;
};

然后,用户可以将状态添加到对象中,并在其Action类实例中检索它们。(也许有更好的方法来提供状态集合)。