我正在尝试创建一个将迭代的结构,并且从左到右依次绘制存储在其中的对象。但是会有容器存放在可绘制对象的旁边。这些容器我认为它们是绘图堆栈,其中可绘制对象彼此重叠绘制。我写了一些粗糙的伪代码,但是我无法想出一个通用接口来让我的容器和可绘制对象继承。我的目标是容器和可绘制对象之间的通用接口。我想我可以通过插入容器来实现它,即使它们内部只有一个可绘制对象,我觉得这只占用更多内存并降低速度。我也不想避免使用对象来获取正确的调用。有人可以建议我应该做什么,我不是最先进的程序员,但我确实努力提高速度和代码。这是我到目前为止(我知道一些接口调用与家属不匹配,我只是不知道该怎么做):
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);
}
};
答案 0 :(得分:4)
这是您需要应用的经典复合设计模式:
答案 1 :(得分:1)
我认为,你要找的是复合模式......