1、テンプレート方法モード


1、テンプレートメソッドモードとは何ですか.操作アルゴリズムのスケルトン(操作ステップ関数に相当)を定義し(安定)、いくつかのステップ(変化)をサブクラスに遅延します(仮想関数を定義し、サブクラスを書き換える).テンプレートメソッドにより、サブクラスは、アルゴリズムの構造を変更することなく、アルゴリズムの特定のステップを再定義(書き換える)ことができる.2、動機?第一に、ソフトウェア構築の過程で、あるタスクに対して、それは常に(安定した)全体的な操作構造を持っている.しかし、各サブステップには多くの変更が必要です.あるいは,固有の理由(例えばフレームワークとアプリケーションの関係)により,タスクの全体構造と同時に実現できない.第二に、安定した動作の構造の下で、各サブステップの変化または後期の実現ニーズに柔軟に対応する方法.「私を呼び出さないで、私にあなたを呼び出させてください」
#include
using namespace std;

class Libary{   //              。

public:

	void   step01()
	{
		cout << "  1" << endl;
	}

	void   step03()
	{
		cout << "  1" << endl;
	}

	void   step05()
	{
		cout << "  1" << endl;
	}

};

class  application{

public:

	bool  setp02(){
		return  true;
	}

	void  setp04(){
		cout << "  4" << endl;
	}

};

void  main3(){

	Libary  lib;

	application app;

	lib.step01();

	if (app.setp02()){
		lib.step03();
	}

	for (int i = 0; i < 3; i++){
		app.setp04();
	}
	lib.step05();

	system("pause");



}
#include
using namespace std;
/*
1、           ?
            (           )(  ),      (  )      (       ,     )。
                    ,      (  )          。
2、  ?
  、               ,    (  )       。               。
  ,       (          ),               。
  、             ,                     。
"     ,      "
*/



class Libary{   //              。
public:

	void run()  //              。              
	{  
		step01();
		if (step02()){ //  ----           
			step03();
		}
		for (int i = 0; i < 3; i++){
			step04();//  ----           
		}
		step05();  
	}

	virtual ~Libary(){}   //    

protected:

	void   step01()  //  
	{
		cout << "  1"<< endl;
	}

	void   step05()  //  
	{
		cout << "  5" << endl;
	}

	void   step03() //  
	{
		cout << "  3" << endl;
	}

	virtual  bool  step02() = 0; //  

	virtual  void  step04() = 0;  //  

};

class  application :public Libary{

	bool  step02()
	{
		return  true;
	}
	void  step04()
	{
		cout << "  4" << endl;
	
	}

};

int main(){


	Libary  *lib=new application();

	lib->run();

	system("pause");

}