テンプレートメソッドパターン

処理フローは同じ、しかし処理内容が違う場合などに使用する。


例:料理する→(出来上がった料理を)食べる→後片付けする

class TemplateBase
{
private:
virtual void Cook(){}
virtual void Eat(){}
virtual void Clean(){}
public:
void Main()
{
Cook();
Eat();
Clean();
}
};

class PatternA : public TemplateBase
{
private:
void Cook() {/*スパゲッティをゆでたり、食器を用意*/}
void Eat() {/*スパゲッティを食べる*/}
void Clean(){/*ナイフとフォークを片付ける*/}
};

class PatternB : public TemplateBase
{
public:
void Cook() {/*冷凍マグロを溶かしてさばく*/}
void Eat() {/*食べる*/}
void Clean(){/*箸と皿を片付ける*/}
};

void Main()
{
PatternA a;
PatternB b;
TemplateBase* pBase;

// スパゲッティ食べる
pBase = &a;
pBase->Main();

// マグロ食べる
pBase = &b;
pBase->Main();

}