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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OPENCV学习笔记3-3_单件模式相关的知识,希望对你有一定的参考价值。

  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_单件模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式学习笔记:单件模式

OPENCV学习笔记15_算法设计中使用策略模式

OPENCV学习笔记16_用控制器设计模式实现功能模块间通信

OpenCV 学习笔记(颜色直方图计算 calcHist)

OPENCV学习笔记3-4_使用模型-视图-控制器设计应用程序

OPENCV学习笔记2-8_Mat_类