单例模式的应用


  单例模式能保证类仅有一个实例,并提供一个访问他的全局的访问点。

    设计窗口常常需要获取其他某个窗口的指针,以下图为例:

单例模式的应用
    要在QAChildDialog里面获取主界面QMainWindows对象的指针,可以通过如下代码完成:

         this->parentWidget()->parentWidget();

    缺点:如果对话框移到其它的窗口的模块下,或者窗口的层次发生了变化,代码就得做出修改。

 

    换一种方案,采用单例模式设计Singleton 类,记录主界面的指针,提供一个全局的访问点。

    class Singleton 
    {
       private:
           Singleton (void);
           QWidget    mainWidget;

    public:
            virtual ~Singleton (void);

    public:

            static  Singleton * GetInstance();
            void SetMainWindow(QWidget* mainwin);
            QWidget*GetMainWindow();

      }

 

    构造函数设为私有,以保证客户端不能直接创建Singleton的对象:

    Singleton ::Singleton (void)
    {
       mainWidget= NULL;
    }

 

   析构函数:

   Singleton ::~Singleton (void)
   {
   

 

    用户只能通过访问Singleton的静态函数GetInstance()接口获取实例,实例设置为static类型,确保整个程序运行阶段Singleton只有一份实例:

    Singleton * Singleton ::GetInstance()
    {
        static Singleton singleton ;
        return &singleton ;
    

 

    注册主窗口指针

    void Singleton ::SetMainWindow( QWidget* mainwin )
    {
        mainWidget = mainwin;
    }

 

   获取主窗口指针

   QWidget* Singleton ::GetMainWindow()
   {
        return mainWidget;
    }


 

    客户端调用:

    在主窗口QMainWindows的构造函数中,调用Singleton ::GetInstance()->SetMainWindow(this);就把主窗口的指针注册到单例中了。

    在其他的窗口中,如果要访问主窗口的指针,直接调用Singleton ::GetInstance()->GetMainWindow();就可得到主窗口的指针。

    优点:在窗口层次或者窗口本身发生变化,获取主界面指针的代码都不需要修改。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值