設計モード:10テンプレートメソッドモード
3740 ワード
テンプレートメソッドモード:
問題:
継承を使用して、サブクラスのテンプレートになるべきで、すべての重複コードは親クラスに上昇し、各サブクラスを重複させるのではありません.
解決方法:
ある詳細階層で一致するプロセスを完了する必要がありますが、個別のステップのより詳細な階層での実装は異なる場合があります.テンプレートメソッドモードで処理します.
意味:操作中のアルゴリズムのスケルトンを定義し、ステップをサブクラスに遅延します.テンプレートメソッドにより、サブクラスは、アルゴリズム構造を変更することなく、アルゴリズムの特定のステップを再定義することができる.
テンプレートメソッドモード:不変の動作をスーパークラスに移動し、サブクラスの重複コードを除去します.テンプレートメソッドモードは、コード多重化を提供します.
main.cpp
Tea.h
Tea.cpp
Coffee.h
Coffee.cpp
Beverage.h
Beverage.cpp
問題:
継承を使用して、サブクラスのテンプレートになるべきで、すべての重複コードは親クラスに上昇し、各サブクラスを重複させるのではありません.
解決方法:
ある詳細階層で一致するプロセスを完了する必要がありますが、個別のステップのより詳細な階層での実装は異なる場合があります.テンプレートメソッドモードで処理します.
意味:操作中のアルゴリズムのスケルトンを定義し、ステップをサブクラスに遅延します.テンプレートメソッドにより、サブクラスは、アルゴリズム構造を変更することなく、アルゴリズムの特定のステップを再定義することができる.
テンプレートメソッドモード:不変の動作をスーパークラスに移動し、サブクラスの重複コードを除去します.テンプレートメソッドモードは、コード多重化を提供します.
main.cpp
#include <iostream>
#include <stdlib.h>
#include "Beverage.h"
#include "Coffee.h"
#include "Tea.h"
using namespace std;
void process()
{
cout << " :" << endl;
Coffee coffee;
coffee.prepareRecipe();
cout << "
:" << endl;
Tea tea;
tea.prepareRecipe();
}
int main(int argc,char* argv[])
{
process();
system("pause");
return 0;
}
Tea.h
#ifndef TEA_H
#define TEA_H
#include "beverage.h"
class Tea :
public Beverage
{
public:
Tea(void);
~Tea(void);
protected:
void brew();
void addCondiments();
};
#endif
Tea.cpp
#include "Tea.h"
#include <iostream>
using namespace std;
Tea::Tea(void)
{
}
Tea::~Tea(void)
{
}
void Tea::brew()
{
cout << " " << endl;
}
void Tea::addCondiments()
{
cout << " " << endl;
}
Coffee.h
#ifndef COFFEE_H
#define COFFEE_H
#include "beverage.h"
class Coffee :
public Beverage
{
public:
Coffee(void);
~Coffee(void);
protected:
void brew();
void addCondiments();
};
#endif
Coffee.cpp
#include "Coffee.h"
#include <iostream>
using namespace std;
Coffee::Coffee(void)
{
}
Coffee::~Coffee(void)
{
}
void Coffee::brew()
{
cout << " " << endl;
}
void Coffee::addCondiments()
{
cout << " " << endl;
}
Beverage.h
#ifndef BEVERAGE_H
#define BEVERAGE_H
class Beverage
{
public:
Beverage(void);
virtual ~Beverage(void);
//
void prepareRecipe();
protected:
void boilWater();//
virtual void brew();// ,
void poulInCup();//
virtual void addCondiments();//
};
#endif
Beverage.cpp
#include "Beverage.h"
#include <iostream>
using namespace std;
Beverage::Beverage(void)
{
}
Beverage::~Beverage(void)
{
}
// : , ; ,
void Beverage::prepareRecipe()
{
boilWater();
brew();
poulInCup();
addCondiments();
}
void Beverage::boilWater()//
{
cout << " " << endl;
}
void Beverage::brew()// ,
{
}
void Beverage::poulInCup()//
{
cout << " " << endl;
}
void Beverage::addCondiments()//
{
}