简单工厂模式---静态工厂方法模式

2 篇文章 0 订阅
2 篇文章 0 订阅

毕业一年多,好久没写csdn了,还需要多多充电,多多学习,多多记录,多多总结,上学时也学过设计模式,但是没在做过大项目,也没用过,也只是看过了,一知半解,工作后项目中的界面框架大佬使用了工厂模式,最近仔细学习了下其中的内容,在此总结作为记录:希望能在合适的地方用到它,看到这篇文章的人也请多多指教:

1.本人对于聚合与组合分不太清,如果看到此文章,就请您多多指教啦,举例指导一下,谢谢!

2.对于虚函数与纯虚函数在使用过程中才会更懂!


一个简单工厂:

#ifndef SIGNALFACTORY_H
#define SIGNALFACTORY_H
class SignalFactory:public QObject
{
    Q_OBJECT
public:
    explicit SignalFactory(int productType, QObject *parent = 0);
    ~SignalFactory();
    void mainInterfaceInit();//根据配置文件初始化不同的界面
    void mainModelInit();//初始化模块信息,如数据库、消息系统等
    QWidget *getMainInterface();//获取主界面
    QWidget *getLoginInterface();//获取登录界面
signals:
public slots:
privte:
    AbstractProduct * p_abstractProduct;//产品抽象类为简单工厂的成员变量【聚合还是组合,如果是聚合则是has a的关系】
};
#endif // SIGNALFACTORY_H

SignalFactory::SignalFactory(int productType, QObject *parent )

 : QObject(parent)

{

        p_abstractProduct = NULL;

        switch(productType)

        {

          case priductA:

                 p_abstractProduct = new ProductA();//new实体类A

                 break;

         case productB:

                 p_abstractProduct = new ProductB();//new实体类B

                 break;   

         default

                break;

        }

}

产品抽象类:含有纯虚函数的类为抽象类,只含有虚函数的类不能被称为抽象类

下面的实体类A与B public 继承产品抽象类,是 is a 的关系

#ifndef ABSTRACTPRODUCT_H
#define ABSTRACTPRODUCT_H
class AbstractProduct:public QObject
{
    Q_OBJECT
public:
    explicit AbstractProduct(QObject *parent = 0);
    ~AbstractProduct();
    virtual void mainInterfaceInit() = 0;//根据配置文件初始化不同的界面   纯虚函数
    virtual void mainModelInit();//初始化模块信息,如数据库、消息系统等    虚函数
    virtual void mainModelInitExt() = 0;//额外模块初始化,如称重智能柜要初始化称重传感器模块
    virtual QWidget *getMainInterface() = 0;//获取主界面
    virtual QWidget *getLoginInterface() = 0;//获取登录界面
signals:
public slots:
private:
public:
    //创建界面类实体
}
#endif // ABSTRACTPRODUCT_H

产品实体类A

#ifndef PRODUCTA_H
#define PRODUCTA_H
class ProductA:public AbstractProduct
{
    Q_OBJECT
public:
    explicit ProductA(QObject *parent = 0);
    ~ProductA();
    void mainInterfaceInit();//根据配置文件初始化不同的界面
    void mainModelInit();//初始化模块信息,如数据库、消息系统等
    QWidget *getMainInterface();//获取主界面
    QWidget *getLoginInterface();//获取登录界面
signals:
public slots:
private:
};
#endif // PRODUCTA_H

产品实体类B

#ifndef PRODUCTB_H
#define PRODUCTB_H
class ProductB:public AbstractProduct
{
    Q_OBJECT
public:
    explicit ProductB(QObject *parent = 0);
    ~ProductB();
    void mainInterfaceInit();//根据配置文件初始化不同的界面
    void mainModelInit();//初始化模块信息,如数据库、消息系统等
    QWidget *getMainInterface();//获取主界面
    QWidget *getLoginInterface();//获取登录界面
signals:
public slots:
private:
};
#endif // PRODUCTB_H

虚函数与纯虚函数的区别

1、虚函数必须实现,不实现编译会报错;而纯虚函数不能实现;

2、虚函数与纯虚函数可以定义在一个类中,但是类中不含有纯虚函数就不被称为抽象类;

3、虚函数可以直接被使用,也可以在子类中实现后以多态的形式调用,而纯虚函数必须由继承它的子类实现后使用;

4、虚函数与纯虚函数通常存在于抽象类中,被继承的子类重载,其目的是提供一个统一的接口;

5、虚函数与纯虚函数不能有static标识符,由于static是静态绑定,前期需要bind,虚函数与纯虚函数为动态绑定,其生命周期不同;

6、虚函数在C++中用于多态,其核心理念通过基类访问派生类;

7、多态性指相同对象收到不同消息或者不同对象收到相同消息时产生的不同实现动作;

8、C++支持俩种多态性,编译时多态性:通过重载函数实现;运行时多态性:通过虚函数实现;

类关系聚合与组合

聚合:A消亡,B不一定消亡;A创建,B不一定 has a的关系

组合:A消亡,B消亡;A创建,B创建 contains a的关系

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值