スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Template Methodパターン

Template Methodパターン
スーパークラスでは処理の枠組みを決めて、サブクラスで具体的な処理内容を実装する。
処理の大枠に差がないような場合に、TemplateMethodの使用価値が高くなる。

まず、スーパークラスにおおまかな処理の流れを定める(work()メソッドのアルゴリズムだけ決めておく)。
細かい具体的な処理内容は、後のサブクラスにお任せすることとする。

public abstract class AbstractProgrammer {
public abstract void goToTheOffice();//オフィスに来る(出社する)。
public abstract void programming();//プログラミングを行う。
public abstract void goHome();//帰宅する。

/** 8時間コーディングして、帰宅する。
*
*/
public final void work(){
goToTheOffice();
for(int hour=0;hour<8;hour++){
System.out.println(this.getClass().getName()+"の"+ hour + "時間め:");
programming();
}
goHome();
}
}


サブクラスに任せる部分の処理を記述していく。

public class JavaProgrammer extends AbstractProgrammer {

private String myLanguage = "Java";

@Override
public void goHome() {
// TODO 自動生成されたメソッド・スタブ
System.out.println("車で帰宅するぞ。");
}

@Override
public void goToTheOffice() {
// TODO 自動生成されたメソッド・スタブ
System.out.println("****今日も" + this.myLanguage + "でコーディングするぞ!****");
}

@Override
public void programming() {
// TODO 自動生成されたメソッド・スタブ
System.out.println("コンパイルしてます。Eclipse使ってます。");
}

}



public class PhpProgrammer extends AbstractProgrammer {

private String myLanguage = "PHP";

@Override
public void goHome() {
// TODO 自動生成されたメソッド・スタブ
System.out.println("徒歩で帰宅するぞ。");
}

@Override
public void goToTheOffice() {
// TODO 自動生成されたメソッド・スタブ
System.out.println("****今日も" + this.myLanguage + "でコーディングするぞ!****");
}

@Override
public void programming() {
// TODO 自動生成されたメソッド・スタブ
System.out.println("コンパイルとか不要です。Aptana Studio使ってます。");
}

}


最初にテンプレートを定めてロジックを共通化しておくことで、全員が正しくworkすることができる。
実行例はこんな感じ。

public class Main {
public static void main(String[] args){

AbstractProgrammer pg1 = new JavaProgrammer();
pg1.work();

AbstractProgrammer pg2 = new PhpProgrammer();
pg2.work();
}
}


実行例はこんな感じ。

****今日もJavaでコーディングするぞ!****
JavaProgrammerの0時間め:
コンパイルしてます。Eclipse使ってます。
JavaProgrammerの1時間め:
コンパイルしてます。Eclipse使ってます。
JavaProgrammerの2時間め:
コンパイルしてます。Eclipse使ってます。
JavaProgrammerの3時間め:
コンパイルしてます。Eclipse使ってます。
JavaProgrammerの4時間め:
コンパイルしてます。Eclipse使ってます。
JavaProgrammerの5時間め:
コンパイルしてます。Eclipse使ってます。
JavaProgrammerの6時間め:
コンパイルしてます。Eclipse使ってます。
JavaProgrammerの7時間め:
コンパイルしてます。Eclipse使ってます。
車で帰宅するぞ。
****今日もPHPでコーディングするぞ!****
PhpProgrammerの0時間め:
コンパイルとか不要です。Aptana Studio使ってます。
PhpProgrammerの1時間め:
コンパイルとか不要です。Aptana Studio使ってます。
PhpProgrammerの2時間め:
コンパイルとか不要です。Aptana Studio使ってます。
PhpProgrammerの3時間め:
コンパイルとか不要です。Aptana Studio使ってます。
PhpProgrammerの4時間め:
コンパイルとか不要です。Aptana Studio使ってます。
PhpProgrammerの5時間め:
コンパイルとか不要です。Aptana Studio使ってます。
PhpProgrammerの6時間め:
コンパイルとか不要です。Aptana Studio使ってます。
PhpProgrammerの7時間め:
コンパイルとか不要です。Aptana Studio使ってます。
徒歩で帰宅するぞ。
スポンサーサイト
プロフィール

tjnet777

Author:tjnet777
Solaris, VPNのサポート業務を1年

金融系SIerで業務アプリの開発、メンテを3年半

離職して大学院大学 1年生

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。