簡體   English   中英

對象創建必須使用哪種設計模式?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM