C++ デザイン パターンにおけるシングルトン モードの簡単な紹介

黄舟
リリース: 2017-01-18 15:07:33
オリジナル
1168 人が閲覧しました

シングルトンパターンとは何ですか?

クラスにはインスタンスが 1 つだけあることを保証し、そのインスタンスへのグローバル アクセス ポイントを提供します。 [DP]

クラス自体がその唯一のインスタンスを保存する責任を負うようにします。このクラスは、他のインスタンスが作成できないことを保証し、このクラスはインスタンスにアクセスするメソッドを提供できます。 【DP】

シングルトンモードはいつ必要ですか?

プログラムは、特定の関数を制御するために 1 つのメソッドのみを必要とし、2 番目の関数を作成することはできません。例: 銀行で使用される番号取得機。

シングルトン モードを使用するには、C++static キーワードの使用法を理解する必要があります。私のこのブログ投稿では、静的を簡単に分析します

テスト ケース:

[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;
}
ログイン後にコピー

シングルトン モードの実装:

[code]class Singleton{
private:
    //将构造函数声明为私有的,从而保证只允许类内使用
    Singleton(){}
    //声明一个类的静态对象(类外初始化)
    static Singleton *instance;
public:
    //静态成员方法,提供一个访问仅有实例的全局访问点。即提供接口创建对象
    static Singleton* getInstance(){
        if(instance != NULL){
            instance = new Singleton;
        }
        return instance;
    }
};
//类外部初始化静态成员变量(静态成员变量必须被初始化)
Singleton* Singleton::instance = NULL;
ログイン後にコピー

添付ファイル: である場合。マルチスレッドプログラミング この場合、ロックと空かどうかの判定を2回行う必要があります。

[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;
ログイン後にコピー

ロックは、2 つのスレッドのうち 1 つだけが入力できるように追加され、もう一方のスレッドは順番に待機します。最初のスレッドが入って出た後、後者のスレッドが入ることができます。 2 番目の null 判定は、最初のスレッドがインスタンスを作成し、2 番目のスレッドが開始後にインスタンスを作成しないことを確認するためのものです。

上記は、C++ デザイン パターンのシングルトン モードを簡単に理解するための内容です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。


ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!