設計モード:テンプレートメソッドモード(Template Method)
2823 ワード
テンプレートメソッドモード:操作中のアルゴリズムのスケルトンを定義し、いくつかのステップをサブクラスに遅延します.TemplateMethodは、サブクラスがアルゴリズムの構造を変更することなく、アルゴリズムの特定のステップを再定義できるようにする.アルゴリズムの不変部分を一度に実装し,可変挙動をサブクラスに残して実装した.
テンプレートメソッドの鍵は、サブクラスが親の可変部分を置換できるが、サブクラスはテンプレートメソッドが表すトップレベルの論理を変更できないことです.テンプレートメソッドモードのメソッドは、テンプレートメソッドと基本メソッドの2つに分類できます.
1テンプレートメソッド1つの抽象クラスには、1つに限らず、任意の複数のテンプレートメソッドがあり得る.各テンプレートメソッドは、任意の複数の特定のメソッドを呼び出すことができます.
2基本メソッドの基本メソッドは、抽象メソッド(Abstract Method)、具体的なメソッド(Concrete Method)、フックメソッドの3つに分けることができます. 抽象メソッド:抽象メソッドは抽象クラスによって宣言され、特定のサブクラスによって実現されます. 具体的な方法:1つの具体的な方法は抽象クラスによって宣言され、実現されるが、サブクラスは実現または置換されない.フックメソッド:抽象クラスによって宣言され、実装され、サブクラスが拡張されます.通常、抽象クラスが与える実装は、メソッドのデフォルト実装として空の実装である.この空のフックの方法を「Do Nothing Hook」といいます.フックメソッドの名前はdoで始まるべきで、これは設計モデルに詳しいJava開発者の標準的なやり方です.たとえばHttpServeretクラスでも,doGet,doPostなどの命名規則に従う.HttpServiceletではテンプレートメソッドはサービス()メソッド,基本メソッドはdoPost()doGet()などのメソッドが担当する.
ケース1 AbstractClass
2 ConcreteClass
参考資料1.23種類のデザインパターン2.『JAVAとモード』のテンプレートメソッドモード
テンプレートメソッドの鍵は、サブクラスが親の可変部分を置換できるが、サブクラスはテンプレートメソッドが表すトップレベルの論理を変更できないことです.テンプレートメソッドモードのメソッドは、テンプレートメソッドと基本メソッドの2つに分類できます.
1テンプレートメソッド1つの抽象クラスには、1つに限らず、任意の複数のテンプレートメソッドがあり得る.各テンプレートメソッドは、任意の複数の特定のメソッドを呼び出すことができます.
2基本メソッドの基本メソッドは、抽象メソッド(Abstract Method)、具体的なメソッド(Concrete Method)、フックメソッドの3つに分けることができます. 抽象メソッド:抽象メソッドは抽象クラスによって宣言され、特定のサブクラスによって実現されます. 具体的な方法:1つの具体的な方法は抽象クラスによって宣言され、実現されるが、サブクラスは実現または置換されない.フックメソッド:抽象クラスによって宣言され、実装され、サブクラスが拡張されます.通常、抽象クラスが与える実装は、メソッドのデフォルト実装として空の実装である.この空のフックの方法を「Do Nothing Hook」といいます.フックメソッドの名前はdoで始まるべきで、これは設計モデルに詳しいJava開発者の標準的なやり方です.たとえばHttpServeretクラスでも,doGet,doPostなどの命名規則に従う.HttpServiceletではテンプレートメソッドはサービス()メソッド,基本メソッドはdoPost()doGet()などのメソッドが担当する.
ケース1 AbstractClass
public abstract class AbstractTemplate
{
public void templateMethod(){
abstractMethod();
doHookMethod();
concreteMethod();
}
protected abstract void abstractMethod();
protected void doHookMethod(){}
protected final void concreteMethod(){
System.out.println("invoke concreteMethod");
};
}
2 ConcreteClass
public class ConcreteTemplate extends AbstractTemplate {
@Override
protected void abstractMethod()
{
System.out.println("ConcreteTemplate-abstractMethod");
}
@Override
public void doHookMethod()
{
System.out.println("ConcreteTemplate-doHookMethod");
}
}
参考資料1.23種類のデザインパターン2.『JAVAとモード』のテンプレートメソッドモード