在此之前,感谢您的阅读!
我正在用 C++ 开发一个应用程序,我想要关于设计问题的建议。让我解释:
我的应用程序的主类有一些集合,但其他类最终需要从其中一个集合中获取值。像这样的东西:
class MainClass {
private:
// Collections are internally implemented as QHash
Collection<Type1> col1;
Collection<Type2> col2;
};
class RosterUnit {
public:
RosterUnit() {
/* This method needs to get a specific value from col1 and
initialize this class with that data */
}
};
class ObjectAction {
public:
virtual void doAction() = 0;
};
class Action1 : public ObjectAction {
public:
void doAction() {
// This needs a specific value from col2
}
};
class Action2 : public ObjectAction {
public:
void doAction() {
// This needs a specific value from col1
}
};
我的第一种方法是在需要时将整个集合作为参数传递,但对于 ObjectAction 子类来说不是很好,因为我必须传递这两个集合,如果我稍后创建另一个 ObjectAction 子类并且它需要从其他对象获取元素集合(假设 col3),我将不得不修改每个 ObjectAction 子类的 doAction() 签名,我认为这不太灵活。另外,假设我有一个 Dialog 并想从那里创建一个 RosterUnit。我必须将集合传递给对话框才能创建 RosterUnit。
接下来,我决定在 RosterUnit 和 ObjectAction 中使用指向集合的静态变量,但我对这个解决方案不太满意。我认为它不够灵活。
我一直在阅读有关设计模式的内容,我首先认为带有 get 函数的 Singleton 可能是一个不错的选择,但经过更多调查后,我认为这不是适合我的案例的设计。如果我使用全局变量会更容易并且或多或少相同,这似乎不是正确的方法。
那么,请您给点建议好吗?
非常感谢你!