第5回 テンプレートメソッドパターン
テンプレートメソッドパターン
言語によってその実装方法はさまざまであるが、
子クラスで差分を実装する書き方なら、
public class Main { public static void main(String args[]) { Hoge h = new Hoge_Ex(); h.execute(); } } abstract class Hoge { public void first(){ System.out.println("親の処理(みんなで共通 前処理)"); } abstract public void second(); public void third(){ System.out.println("親の処理(みんなで共通 後処理)"); } public void execute(){ first(); second(); third(); } } class Hoge_Ex extends Hoge { public void second(){ System.out.println("ここは共通じゃないので子クラスで実装");} }
結果:
親の処理(みんなで共通 前処理) ここは共通じゃないので子クラスで実装 親の処理(みんなで共通 後処理)
子クラスの名前を考えるのがうっとうしいなら
無名クラスを生成
public class Main { public static void main(String args[]) { Hoge h = new Hoge(){ public void second(){ System.out.println("ここは共通じゃないので子クラスで実装"); } }; h.execute(); } } abstract class Hoge { public void first(){ System.out.println("親の処理(みんなで共通 前処理)"); } abstract public void second(); public void third(){ System.out.println("親の処理(みんなで共通 後処理)"); } public void execute(){ first(); second(); third(); } }
インスタンス名を考えるのもうっとうしい場合は
無名クラスをそのまま実行
public class Main { public static void main(String args[]) { new Hoge(){ public void second(){ System.out.println("ここは共通じゃないので子クラスで実装"); } }.execute(); } } abstract class Hoge { public void first(){ System.out.println("親の処理(みんなで共通 前処理)"); } abstract public void second(); public void third(){ System.out.println("親の処理(みんなで共通 後処理)"); } public void execute(){ first(); second(); third(); } }