Maison > développement back-end > Tutoriel C#.Net > Modèle de conception C brève introduction au modèle singleton

Modèle de conception C brève introduction au modèle singleton

黄舟
Libérer: 2017-01-18 15:07:33
original
1192 Les gens l'ont consulté

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;
}
Copier après la connexion

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;
Copier après la connexion

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;
Copier après la connexion

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 (www.php.cn) !


Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal