Monostate

Last-modified: 2013-11-08 (金) 17:02:56
  • あるクラスに対し、同じ静的データを使うインスタンスを復数作成できる
  • 同じデータを共有する
  • 単一性を透過
  • Singletonとの違い
    • オブジェクトの初期化タイミングが制御できない
    • Singletonオブジェクト自体に状態の保存ができない
    • Singletonは単一構造を強制、Monostateは単一動作を強制
#include

class Monostate{
public:
	void SetValue(const int n){ val = n; }
	const int GetValue()const{ return val; }
private:
	static int val;
};

int Monostate::val;

int main(){
	Monostate ms1,ms2,ms3;
	ms1.SetValue(1);
	std::cout << "Set 1" << std::endl;
	std::cout << ms1.GetValue() << std::endl;
	std::cout << ms2.GetValue() << std::endl;
	std::cout << ms3.GetValue() << std::endl;
	ms2.SetValue(2);
	std::cout << "Set 2" << std::endl;
	std::cout << ms1.GetValue() << std::endl;
	std::cout << ms2.GetValue() << std::endl;
	std::cout << ms3.GetValue() << std::endl;
	ms3.SetValue(3);
	std::cout << "Set 3" << std::endl;
	std::cout << ms1.GetValue() << std::endl;
	std::cout << ms2.GetValue() << std::endl;
	std::cout << ms3.GetValue() << std::endl;
	return 0;
}

出力

Set 1
1
1
1
Set 2
2
2
2
Set 3
3
3
3