土曜日, 5月 18, 2013

C++でデザインパターン1 - シングルトン

デザインパターン

といえばやはりJava,となるのはやはりJavaが成し得たオブジェクト指向言語としての洗練さゆえか.ここではあえてC++でデザインパターンを実装していってみようと思う.

シングルトン - 適用例

最初の例はシングルトンである.ご存じの通り,あるリソースへのアクセスを制御したい時にシングルトンデザインを取る場合もある.ただし,シングルトンはユニットテストとの相性の悪さやマルチスレッド環境化において並列実行性能を低下させることもある為,敬遠されることが多い.


例の留意点

この例ではID生成シングルトンクラスを示している.この例はわかりやすさを優先しているため,実用の点から見て全くクオリファイしないことを念頭に置いてほしい.




コード

#include <iostream>
#include <ctime>

using namespace std;

class IDGenerator;

class IDGenerator {
private:
 int max;
 IDGenerator(long,int);
public:
 static IDGenerator& GetInstance(long,int);
 ~IDGenerator();
 int Next();
};

IDGenerator::IDGenerator(long seed,int maxVal):max(maxVal) {
 srand(seed);
}

IDGenerator::~IDGenerator(){}

IDGenerator& IDGenerator::GetInstance(long seed,int maxVal){
 static IDGenerator gen(seed,maxVal);
 return gen;
}

int IDGenerator::Next() {
 return rand() % max;
}

int main() {
 IDGenerator idGen = IDGenerator::GetInstance(time(NULL),100);
 for(int i = 0;i < 20;i++ ) {
  cout << idGen.Next() << " ";
 }

 return EXIT_SUCCESS;
}

0 件のコメント: