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();
}

 

转载于:https://www.cnblogs.com/yunfung/p/7577320.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值