包含对象和容器的容器
Posted
技术标签:
【中文标题】包含对象和容器的容器【英文标题】:Container containing Objects and Containers 【发布时间】:2011-05-05 13:57:56 【问题描述】:我正在尝试创建一个将被迭代的结构,并且存储在其中的对象将按从左到右的顺序绘制。但是会有一些容器存储在可绘制对象旁边。这些容器我认为它们是绘图堆栈,其中可绘制的对象被绘制在彼此的顶部。我写了一些粗略的伪代码,但我无法想出一个通用接口来让我的容器和可绘制对象都继承自。我的目标是容器和可绘制对象之间的通用接口。我想我可以通过插入容器来做到这一点,即使它们里面只有一个可绘制对象,我觉得这只会占用更多内存并降低速度。我也不想避免强制转换对象来获得正确的调用。有人可以建议我应该做什么,我不是最先进的程序员,但我确实努力提高速度和减少代码。这是我到目前为止所拥有的(我知道一些接口调用与依赖项不匹配,我只是不知道该怎么做):
class IDrawable
protected:
signal_t sig; // this is an enumeration
public:
void paint(QPainter &painter); // This functionality will be defined here since it is painting to a pixmap
virtual void reset() = 0;
virtual void init() = 0; // Setup code will go here
virtual void update(float) = 0;
;
class Signal : public virtual IDrawable
private:
bool state; // By default this will be false
public:
Signal();
virtual ~Signal();
// Parameters for update is 0 or 1, since the graphic is just toggled on or off
virtual void update(float) = 0; // Drawing happens here. Will draw to pixmap
bool state() return state;
;
class Gage : public virtual IDrawable
private:
float cur_val;
public:
Gage();
virtual ~Gage();
virtual void init() = 0; // Setup code will go here
virtual void update(float) = 0; // Drawing happens here. Will draw to pixmap
;
class TextGage : public virtual Gage
public:
TextGage();
virtual ~TextGage();
void update(float); // Define update functionality here
;
// a stack can coexist with a Gage object in a container
class DrawableStack : public virtual IDrawable
private:
QMap<signal_t, IDrawable*> *Stack;
public:
DrawableStack();
virtual ~DrawableStack();
void init()
Stack = new QMap<signal_t, IDrawable*>();
void update(signal_t,float); // Drawing happens here. Will draw to pixmap
void setStack(QMap<IDrawable*> *gageStack)
Stack = gageStack;
void push(IDrawable* node)
Stack.insert(node->sigType, node);
;
【问题讨论】:
【参考方案1】:这是您需要应用的经典复合设计模式:
http://en.wikipedia.org/wiki/Composite_pattern
【讨论】:
是的,这正是我要找的。现在我只需要弄清楚如何搜索具有特定信号 ID 的孩子 看起来像是访客的工作 ;) en.wikipedia.org/wiki/Visitor_pattern【参考方案2】:我认为,您正在寻找的是复合模式...
【讨论】:
以上是关于包含对象和容器的容器的主要内容,如果未能解决你的问题,请参考以下文章