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