Qu'est-ce que le modèle singleton ?
Garantit qu'une classe n'a qu'une seule instance et lui fournit un point d'accès global. [DP]
Laissez la classe elle-même se charger de sauvegarder sa seule instance. Cette classe garantit qu'aucune autre instance ne peut être créée, et cette classe peut fournir une méthode pour accéder à l'instance. 【DP】
Quand le mode singleton est-il nécessaire ?
Le programme n'a besoin que d'une seule méthode pour contrôler une certaine fonction et n'est pas autorisé à créer une deuxième fonction. Par exemple : la machine à numéroter utilisée par les banques.
Pour utiliser le mode singleton, vous devez comprendre l'utilisation du mot-clé statique C. Cet article de blog analyse brièvement le cas de test statique
:
[code]int main(){ //单例模式初始化两个实例的方法 Singleton *s1 = Singleton::getInstance(); Singleton *s2 = Singleton::getInstance(); if(s1 == s2) std::cout << "Two the objects are the same instance.\n"; else std::cout << "Two the objects are the different instance.\n"; return 0; }
Mode Singleton. Implémentation :
[code]class Singleton{ private: //将构造函数声明为私有的,从而保证只允许类内使用 Singleton(){} //声明一个类的静态对象(类外初始化) static Singleton *instance; public: //静态成员方法,提供一个访问仅有实例的全局访问点。即提供接口创建对象 static Singleton* getInstance(){ if(instance != NULL){ instance = new Singleton; } return instance; } }; //类外部初始化静态成员变量(静态成员变量必须被初始化) Singleton* Singleton::instance = NULL;
Pièce jointe : S'il s'agit d'une programmation multithread, vous devez la verrouiller et juger si elle est vide deux fois.
[code]class Singleton{ private: //将构造函数声明为私有的,从而保证只允许类内使用 Singleton(){} //声明一个类的静态对象(类外初始化) static Singleton *instance; public: //静态成员方法,提供一个访问仅有实例的全局访问点。即提供接口创建对象 static Singleton* getInstance(){ if(instance != NULL){ lock(syncObj){ if(instance != NULL){ instance = new Singleton; }//if }//lock }//if return instance; } }; //类外部初始化静态成员变量(静态成员变量必须被初始化) Singleton* Singleton::instance = NULL;
Le verrou est ajouté pour qu'un seul des deux threads puisse entrer, tandis que l'autre thread fait la queue. Après que le premier thread soit entré et sorti, ce dernier peut entrer. Le deuxième jugement nul consiste à garantir que le premier thread crée une instance et que le deuxième thread ne créera plus d'instance après son entrée.
Ce qui précède est le contenu d'une brève introduction au mode singleton des modèles de conception C. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (m.sbmmt.com) !