最も一般的な設計モード----単一インスタンスモード(C++実装)
1273 ワード
単一インスタンスモードは、本人が最も簡単な設計モードの一つと考えているが、もちろん一般的な状況に対して、スレッドの安全など一連の他の問題を考慮しないことである.シングルインスタンスモードも最も一般的なモードです.私はデザインモデルを学ばない前に、このモデルを使っていましたが、自分では知らなかっただけです.クラスなどを一度インスタンス化し、グローバル制御ポイントにアクセスすることを保証します.
たとえば、アプリケーションにはアプリケーションiotnクラスがあり、アプリケーションごとにこのようなオブジェクトが1つしかないことは明らかです.しかし、他の開発者がうっかりこのオブジェクトをインスタンス化するのを恐れています.では、単一インスタンスモードが必要です.
次に、単一インスタンスの構造図を示します.
単一のインスタンスを作成するには、簡単に3つの点を実行する必要があります.
A.あなたのコンストラクション関数をprivateに設定すると、このクラスを作成できる人はいません.
B.グローバル一意のインスタンスを作成する
C.この例を得るためのインタフェースを提供する.
コード:
簡単でしょうが、残念ながらこのクラスはスレッドセキュリティではありません.スレッドセキュリティを行うには、自分でロックする必要があります.この点は後で実現します.したがって、グローバル構成、一意のリソースを使用する必要がある場合.再インスタンス化を防止する場合は、シングルインスタンスモードを採用してください.オラ~~~~
たとえば、アプリケーションにはアプリケーションiotnクラスがあり、アプリケーションごとにこのようなオブジェクトが1つしかないことは明らかです.しかし、他の開発者がうっかりこのオブジェクトをインスタンス化するのを恐れています.では、単一インスタンスモードが必要です.
次に、単一インスタンスの構造図を示します.
単一のインスタンスを作成するには、簡単に3つの点を実行する必要があります.
A.あなたのコンストラクション関数をprivateに設定すると、このクラスを作成できる人はいません.
B.グローバル一意のインスタンスを作成する
C.この例を得るためのインタフェースを提供する.
コード:
#include <iostream>
using namespace std;
class Application
{
public:
~Application(){};
static Application* getApp(){// getInstance()
if(!m_instance) {
m_instance = new Application();
}
return m_instance;
}
private:
Application():m_instance(NULL){};
static Application* m_instance;
};
Application* Application::m_instance = NULL;//
void main()
{
Application* app = Application::getApp();
//app.doSomeThing()...
//Application newApp; //error
system("pause");
}
簡単でしょうが、残念ながらこのクラスはスレッドセキュリティではありません.スレッドセキュリティを行うには、自分でロックする必要があります.この点は後で実現します.したがって、グローバル構成、一意のリソースを使用する必要がある場合.再インスタンス化を防止する場合は、シングルインスタンスモードを採用してください.オラ~~~~