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

标签 c++ qt design-patterns

我有多个对象类(如 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/

相关文章:

c++ - 如何在类中实现可选择的类似命名空间的功能?

java - 通过子集搜索、算法(最优或启发式)

c++ - 有没有办法使dlopen故意失败

c++ - Qt 测试当前对象/小部件是否存在

c++ - Qchar* 到 char* 的转换

c# - 领域模型实体与数据实体,软件架构中的一个或两个

C++ 获取文件总行号

javascript - 通过 Javascript 在 Qml 中更改时字符串的末尾被 chop

java - 动态加载抽象工厂

JavaScript 设计模式与 Meteor