码迷,mamicode.com
首页 > 其他好文 > 详细

OPENCV学习笔记3-3_单件模式

时间:2017-09-22 23:56:43      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:stat   gui   工作   单件模式   获取   一件事   control   返回   single   

  OPENCV  单件是另外一种流行的设计模式,用于简化对一个类实例的访问,同时保证在程序的执行期间只有一个实例存在。下面使用单件来访问一个控制器对象。将前面的ColorDetectController类修改,以包含一个单件类。

//要做第一件事是添加一个私有类的静态成员变量,它将保存对单个类实例的引用。同时,为了禁止创建额外的//类实例,构造函数也是私有的。
class ColorDetectController {
    private:
        //单件指针
static ColorDetectController *singleton; // pointer to the singleton
        ColorDetector *cdetect;
    
        // private constructor  私有构造函
ColorDetectController() {
//setting up the application 初始化工作
cdetect= new ColorDetector();
        }

//此外还可以使复制构造函数和操作符私有化,以确保无法创建独一无二的单件实例拷贝。当以个用户的类要求//单件类的一个实例,才可以被创建它通过一个静态的方法实现,如果实例不存在那么创建,然后返回一个指向//该实例指针
//访问单件实例
static ColorDetectController *getInstance() {
if (singleton == 0)
    singleton= new ColorDetectController;
return singleton;
}
//需要注意,单件的实现并不是线程安全的,因此在多线程情况下不适用它
//最后,因为单件实例是被动态创建的,当用户不使用时要输出它,也是通过一个静态函数来实现
static void destroy() {
if (singleton != 0) {
    delete singleton;
    singleton= 0;
    }
}
//由于单件是一个静态成员变量,必须在.CPP文件中定义
#include "colorDetectController.h"
ColorDetectController *ColorDetectController::singleton=0;

//因为,单件可以通过一个公共静态方法获取,所有包含单件类声明的类都能访问它,尤其适用控制器对象,它//被多个拥有复杂GUI的窗口控件类访问。其他任何一个类都不需要声明一个成员变量,对话框的两个回调方法//编写如下
void onopen()
{
    //......
    ColorDetectController::getInstance()->setInputImage(filename);    //指针
}
void onclose()
{
    //......
    // Releases the Singleton
    ColorDetectController::getInstance()->destroy();
}

 

OPENCV学习笔记3-3_单件模式

标签:stat   gui   工作   单件模式   获取   一件事   control   返回   single   

原文地址:http://www.cnblogs.com/yunfung/p/7577320.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!