我有多个Object类(例如Plot,Bars,Dial Box,flight Instrument)。我正在从对象接口类创建对象。对象接口类具有所有对象类来创建对象并将对象返回给客户端。但是稍后添加对象并更改对象的属性会很繁琐。 要解决这个问题,我必须使用哪种设计模式以及如何使用?我知道必须使用Factory Design模式子类来决定对象的创建。在我的情况下我不知道该怎么办。
客户代码
void GraphView::dropEvent(QDropEvent *event)// client side code
{
if (event->mimeData()->hasFormat(itemlistMimeType()))
{
if(event->mimeData()->text() == "Plot")
{
ObjInterfaceClass * pObjInterface = new ObjInterfaceClass ;// object creation
pObjInterface->CreateObject(CUSTOM_PLOT_NAME) ;
pObjInterface->DrawObject();
}
}
}
对象接口类.h
class ObjInterfaceClass : public QObject
{
public:
ObjInterfaceClass(QObject *parent = nullptr);
static QStringList GetObjectDetails();
static ObjectPropStruct LoadObjProperty(char *pObjName);
void CreateObject(char* pObjectName) ;
void DrawObject() ;
};
具体课程,就像这样的具体课程,
class AlphaNumLabel : public QLabel
{
Q_OBJECT
public:
AlphaNumLabel( int type, QWidget *parent = NULL );
void setLabelText(int parameter);
void setLabelText(double parameter);
void setLabelText(QString parameter);
private:
QLabel *mpLabel;
int mLabelType;
};
AlphaNumLabel::AlphaNumLabel(int type,QWidget *parent ): QLabel( parent )
{
mpLabel = new QLabel(this);
mLabelType = type ;
}
For more details see this pic 欢迎任何想法或参考
答案 0 :(得分:0)
您的类AlphaNumLabel
派生自QLabel
,并具有成员变量QLabel
。我想您只需要其中之一。
因此,最有可能解决您问题的方法是:从您要提供的界面(类)中派生AlphaNumLabel
类。
并且,与Java不同,您的接口类可能包含实际代码,因此您可以在接口类中添加与所有派生类相同的代码。或者,您可以创建一个抽象接口类(仅包含纯虚拟方法)并从中派生一个适配器类,该适配器类包含所述共享代码。
然后,您的工厂类/函数可以将指针返回接口对象。
但是,实际上您不应该返回裸指针。使用unique_ptr<>
或shared_pt<>
确保不再需要时删除对象。