标签: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(); }
标签:stat gui 工作 单件模式 获取 一件事 control 返回 single
原文地址:http://www.cnblogs.com/yunfung/p/7577320.html