Heim  >  Artikel  >  Backend-Entwicklung  >  Eine kurze Einführung in den Singleton-Modus in C++-Entwurfsmustern

Eine kurze Einführung in den Singleton-Modus in C++-Entwurfsmustern

黄舟
黄舟Original
2017-01-18 15:07:331098Durchsuche

Was ist das Singleton-Muster?

Stellt sicher, dass eine Klasse nur eine Instanz hat und stellt einen globalen Zugriffspunkt darauf bereit. [DP]

Lassen Sie die Klasse selbst für das Speichern ihrer einzigen Instanz verantwortlich sein. Diese Klasse garantiert, dass keine andere Instanz erstellt werden kann, und diese Klasse kann eine Methode für den Zugriff auf die Instanz bereitstellen. 【DP】

Wann wird der Singleton-Modus benötigt?

Das Programm benötigt nur eine Methode zur Steuerung einer bestimmten Funktion und darf keine zweite Funktion erstellen. Zum Beispiel: der Zahlenprüfer der Banken.

Um den Singleton-Modus verwenden zu können, müssen Sie die Verwendung des C++-Schlüsselworts „static“ verstehen. Dieser Blog-Beitrag von mir analysiert kurz den statischen Testfall:

Einzelbeispielmodus-Implementierung:
[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;
}

Anhang: Wenn es sich um Multithread-Programmierung handelt, müssen Sie zweimal sperren und beurteilen, ob es leer ist.
[code]class Singleton{
private:
    //将构造函数声明为私有的,从而保证只允许类内使用
    Singleton(){}
    //声明一个类的静态对象(类外初始化)
    static Singleton *instance;
public:
    //静态成员方法,提供一个访问仅有实例的全局访问点。即提供接口创建对象
    static Singleton* getInstance(){
        if(instance != NULL){
            instance = new Singleton;
        }
        return instance;
    }
};
//类外部初始化静态成员变量(静态成员变量必须被初始化)
Singleton* Singleton::instance = NULL;

Die Sperre wird hinzugefügt, sodass nur einer der beiden Threads eintreten kann, während der andere Thread in der Schlange wartet. Nachdem der erste Thread ein- und ausgegangen ist, kann der letztere eintreten. Das zweite Nullurteil besteht darin, sicherzustellen, dass der erste Thread eine Instanz erstellt und der zweite Thread nach der Eingabe keine Instanz mehr erstellt.
[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;

Das Obige ist der Inhalt einer kurzen Einführung in den Singleton-Modus in C++-Entwurfsmustern. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn