BRIDGEパターン

「BRIDGE=橋」

橋パターンです。

詳しい説明は後で。

とりあえず、書いてみる。




// 架空のゲームハードのシステムを切り替えるたとえ

// システムベース
class SystemBase
{
public:
SystemBase(){}
virtual ~SystemBase(){}
// ピュアなメンバ関数ちゃん
virtual void Boot() = 0;
virtual void Run() = 0;
virtual void ShutDown() = 0;
};

// システムA
class SystemA : public SystemBase
{
public:
SystemA(){}
virtual ~SystemA(){}

void Boot(){printf("A「立ち上がるでござる」\n");}
void Run(){printf("A「実行中でござる」\n");}
void ShutDown(){printf("A「シャットダウン中でござる」\n");}

};

// システムB
class SystemB : public SystemBase
{
public:
SystemB(){}
virtual ~SystemB(){}

void Boot(){printf("B「立ち上がるでござる」\n");}
void Run(){printf("B「実行中でござる」\n");}
void ShutDown(){printf("B「シャットダウン中でござる」\n");}
};



// 架空のゲームハードの基底(ブリッジクラス)
class GameHardBase
{
public:

// システムを設定できる
GameHardBase(SystemBase* pSystem):m_pImpSystem(pSystem){}

~GameHardBase()
{
delete m_pImpSystem;
m_pImpSystem= NULL;
}

// ブート
void Boot()
{
if (m_pImpSystem== NULL) return;
m_pImpSystem->Boot();
}

// 実行
void Run()
{
if (m_pImpSystem== NULL) return;
m_pImpSystem->Run();
}

// シャットダウン
void ShutDown()
{
if (m_pImpSystem== NULL) return;
m_pImpSystem->ShutDown();
}


//
public:
SystemBase* m_pImpSystem;
};


// 架空のゲームハード
class PsBox3 : public GameHardBase
{
public:
PsBox3(SystemBase* pSystem):GameHardBase(pSystem){}
virtual ~PsBox3(){}
};

void Main()
{
GameHardBase* pPsBox = new PsBox3(new SystemA());

pPsBox->Boot();
pPsBox->Run();
pPsBox->ShutDown();

delete pPsBox;

}

毎回たとえに困る。

そして例えが中途半端orz