5.設計モードのテンプレートモード



テンプレートモード
操作中のアルゴリズムのフレームワークを定義し、いくつかのステップをサブクラスに遅延させ、サブクラスがアルゴリズムの構造を変更せずにアルゴリズムの特定のステップを再定義できるようにする.
私の理解テンプレートモードは、メソッドが実行する全体的なステップを定義していますが、各ステップの具体的な実装はサブクラスによって複写されます.
キー:テンプレートメソッドキーワードfinalで書き直す必要があるメソッドabstractで修飾
 
Example:試験:三歩:答案を出して、答案を作って、答案を出して、今私達は歴史と数学の情況を試験することを実現します
 
フック:
テンプレートモードにはフックの機能があります.フックとは、いくつかの状況でこのテンプレートのステップを実行することですが、場合によっては別のステップを実行します.私たちの例では、数学を試験するとき、答案用紙を出し終わったら、先生はいつも問題をよくして剽窃しないでくださいと言っています.このとき、フックを使うことができます.
 
1.テンプレートクラス
public abstract class ExaminationTemplate {

	public boolean hook = false;//   

	//     
	final void templatMethod() {
		//      
		if (hook) {
			givePapers();
			teacherSay();
			doPapers();
			handInPapers();
		} else {
			givePapers();
			doPapers();
			handInPapers();
		}
	}

	//   
	abstract void givePapers();

	//   
	abstract void doPapers();

	//   
	abstract void handInPapers();

	//   
	abstract void teacherSay();

}

 2.歴史試験
public class HistoryExamination extends ExaminationTemplate{
	@Override
	void givePapers() {
		System.out.println("      ");
	}
	@Override
	void doPapers() {
		System.out.println("     ");
	}
	@Override
	void handInPapers() {
		System.out.println("      ");
	}
	@Override
	void teacherSay() {
		
	}
}

3.数学の試験
public class MathExamination extends ExaminationTemplate{
	@Override
	void givePapers() {
		System.out.println("      ");
	}
	@Override
	void doPapers() {
		System.out.println("     ");
	}
	@Override
	void handInPapers() {
		System.out.println("      ");
	}
	@Override
	void teacherSay() {
		System.out.println("       ");
	}
}

4.運転方法
public class Main {

	public static void main(String[] args) {
		//     
		HistoryExamination historyExamination = new HistoryExamination();
		historyExamination.templatMethod();
		System.out.println("--------------------");
		//     ,      
		MathExamination mathExamination = new MathExamination();
		mathExamination.hook=true;
		mathExamination.templatMethod();
		
	}
}

 
結果:
 
歴史の答案用紙を配って歴史の答案用紙の上で歴史の答案用紙を出します-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 
ソースドキュメント<http://blog.csdn.net/s464036801/article/details/8468926>を参照してください.
ナビゲーションに戻る