我有多个对象类(如 Plot、Bars、Dial Box、flight Instrument)。我正在从对象接口(interface)类创建对象。对象接口(interface)类具有所有对象类创建对象并将对象返回给客户端。但是稍后在繁琐的工作中添加对象和更改对象的属性。 为了解决这个问题,我必须使用哪种设计模式以及如何使用? 我知道我必须使用工厂设计模式子类来决定对象的创建。在我的情况下,我不知道该怎么做。
客户代码
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();
}
}
}
对象接口(interface)类.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)有很多
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
欢迎任何想法或引用
最佳答案
您的类(class)AlphaNumLabel
源自 QLabel
AND 有一个成员变量 QLabel
.我猜你只需要其中一个。
因此,您的问题的答案很可能是:导出您的 AlphaNumLabel
您要提供的接口(interface)(类)中的类。
而且,与 Java 不同的是,您的接口(interface)类可能包含真实代码,因此您可以在接口(interface)类中为您的所有派生类添加相同的代码。或者,您可以创建一个抽象接口(interface)类(仅包含纯虚方法)并从中派生一个适配器类,其中包含所述共享代码。
然后,您的工厂类/函数可以返回指向接口(interface)对象的指针。
但是,实际上你不应该返回裸指针。使用unique_ptr<>
或 shared_pt<>
确保在不再需要时删除对象。
关于c++ - 对象创建必须使用哪种设计模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51439393/