[英]Which design pattern have to use for Object Creation?
我有多個對象類(例如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();
}
}
}
對象接口類
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 ;
}
有關更多詳細信息,請參見此圖片。歡迎任何想法或參考
您的類AlphaNumLabel
派生自QLabel
,並且具有成員變量QLabel
。 我想您只需要其中之一。
因此,最有可能解決您問題的方法是:從要提供的接口(類)中派生AlphaNumLabel
類。
並且,與Java不同,您的接口類可能包含實際代碼,因此您可以在接口類中添加與所有派生類相同的代碼。 或者,您可以創建一個抽象接口類(僅包含純虛擬方法)並從中派生一個適配器類,該適配器類包含所述共享代碼。
然后,您的工廠類/函數可以將指針返回接口對象。
但是,實際上您不應該返回裸指針。 使用unique_ptr<>
或shared_pt<>
確保不再需要時刪除對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.