シングルトンパターンとは何ですか?
クラスにはインスタンスが 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) に注目してください。