对象创建必须使用哪种设计模式?

时间:2018-07-20 09:27:41

标签: c++ qt design-patterns

我有多个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 欢迎任何想法或参考

1 个答案:

答案 0 :(得分:0)

您的类AlphaNumLabel派生自QLabel,并具有成员变量QLabel。我想您只需要其中之一。

因此,最有可能解决您问题的方法是:从您要提供的界面(类)中派生AlphaNumLabel类。

并且,与Java不同,您的接口类可能包含实际代码,因此您可以在接口类中添加与所有派生类相同的代码。或者,您可以创建一个抽象接口类(仅包含纯虚拟方法)并从中派生一个适配器类,该适配器类包含所述共享代码。

然后,您的工厂类/函数可以将指针返回接口对象。
但是,实际上您不应该返回裸指针。使用unique_ptr<>shared_pt<>确保不再需要时删除对象。