Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 创建对象时必须使用哪种设计模式?_C++_Qt_Design Patterns - Fatal编程技术网

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

C++ 创建对象时必须使用哪种设计模式?,c++,qt,design-patterns,C++,Qt,Design Patterns,我有多个对象类(如绘图、条形图、刻度盘、飞行仪表)。我从对象接口类创建对象。对象接口类拥有所有对象类创建对象并将对象返回给客户端。但添加对象和更改对象属性将是一项繁琐的工作要解决这个问题,我必须使用哪种设计模式以及如何使用?我知道我必须使用Factory design pattern子类将决定对象的创建。在我的情况下,我不知道该怎么办 客户端代码 void GraphView::dropEvent(QDropEvent *event)// client side code { if

我有多个对象类(如绘图、条形图、刻度盘、飞行仪表)。我从对象接口类创建对象。对象接口类拥有所有对象类创建对象并将对象返回给客户端。但添加对象和更改对象属性将是一项繁琐的工作要解决这个问题,我必须使用哪种设计模式以及如何使用?我知道我必须使用Factory design pattern子类将决定对象的创建。在我的情况下,我不知道该怎么办

客户端代码

 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 ;  
     }  

欢迎任何想法或参考

您的类
AlphaNumLabel
是从
QLabel
派生的,并且有一个成员变量
QLabel
。我想你只需要一个

因此,您的问题的答案很可能是:从您想要提供的接口(类)派生
AlphaNumLabel

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

然后,工厂类/函数可以返回指向接口对象的指针。

但是,实际上不应该返回裸指针。使用
unique\u ptr
shared\u pt
确保在不再需要时删除对象。

感谢您的回复,AlphaNumlabel类是我为了理解场景而提供的,就像这里有这么多对象类一样。我不能从接口类派生的每个类。有没有别的办法呢?也许你要的是装饰图案?谢谢。。我将经历这个模式。。。如果您有任何好的例子,请分享该链接。。