のんびりしているエンジニアの日記

ソフトウェアなどのエンジニア的な何かを書きます。

Design Pattern Singleton(ファイル読み出しとかに使えるかもね)

Sponsored Links

皆さんこんにちは
お元気ですか。私は元気かもしれません。
研究は迷走してますとも…

さて、今日はDesignPatternのSingletonについて

Singletonとは?

概要

これを使うとインスタンスがひとつしか生成されないようなデザインパターンです。

例えば、同じファイルを読み込みつづけるときに複数メソッドメンバ関数)にまたがりで同じ内容のものを扱いたい時に使えます。

特徴

引用元のWikiではこのように特徴付けられています。
・同じ型のインスタンスが private なクラス変数として定義されている。
→外から見えるとコピーできるようになる
コンストラクタの可視性が private である。
インスタンスを生成しない
・同じ型のインスタンスを返す getInstance() がクラス関数として定義されている。
→異なるインスタンスの提供を防ぐ

用途として、変化のない必要な設定ファイルの読み込みなどの単一のオブジェクト(クラス)を提供したい時に利用できます。

ソースコード

#include <string>

#include <iostream>
using namespace std;

class HelloWorld{
private:
	HelloWorld(){}
	HelloWorld(const HelloWorld &r){}
	HelloWorld& operator=(const HelloWorld &r){}
public:
	static HelloWorld* getInstance(){
		static HelloWorld inst;
		return &inst;
	}

	const char* getString(){
		return "HelloWorld";
	}
};

int main(int argc, char const *argv[])
{
	cout << HelloWorld::getInstance()->getString() << endl;
	return 0;
}

HelloWorld内でアドレスを渡すことにより単一のクラスそして、staticをつけることにより同じインスタンスを返却することを実現しています。

今回の場合のgetString()メンバ関数を他の関数に切り替えることで同じファイルを読み出すことができますね。