不同的基本对象过程使用什么设计模式
what design pattern to use for different base object procedures
我想写一个可以扩展的库。以下是一个粗略的代码大纲:
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类实例中检索它们。(也许有更好的方法来提供状态集合)。
相关文章:
- 派生类是否可以在抽象工厂设计模式中具有数据成员
- 资源管理设计模式
- 用于在回调中调用解析器的设计模式
- 设计帮助 - 为不同类型的消息处理通用接口的设计模式
- 在这种情况下我应该使用哪种设计模式
- C++中物体改变识别的设计模式?
- 使用什么设计模式来收集项目?
- 最简单的事件设计模式是什么
- 解释器和中介器的设计模式有什么区别
- 什么是包裹着色器参数值的类的好设计模式
- 什么设计模式将数据部分保存在持久存储 (SQL) 中,部分保存在 RAM(内存)中
- 通过工厂设计模式向客户隐藏新内容的优势是什么
- 一些数据库持久性设计模式是什么
- 在什么情况下,单例设计模式可能会生成同一单例类的多个实例
- 这个设计模式是什么?如何使用它
- 不同的基本对象过程使用什么设计模式
- 什么类型的设计模式使事件更容易
- 什么OOD设计模式应该用于服务器-处理-客户端请求
- 在遵循pimpl设计模式的类中实现move语义的正确方法是什么?
- 设计模式——在c++中,当实现(一组单例)直接从它们的编译单元在某个注册表中自注册时,它被称为什么?