テンプレート メソッド パターン (テンプレート メソッド
) は、操作のアルゴリズム スケルトンを定義し、アルゴリズムの一部のステップをサブクラスに遅延させて、サブクラスが特定の特定のメソッドを再定義できるようにします。アルゴリズムの構造を変更することなく、アルゴリズムのステップを変更できます。
テンプレート メソッド パターンには、次の主な役割が含まれています。
抽象クラス (Abstract Class
): 与える役割を果たします。アルゴリズムのシルエットとスケルトン。これは、テンプレート メソッドといくつかの基本メソッドで構成されます。
抽象メソッド (Abstract Method
): 抽象メソッドは、抽象クラスによって宣言され、その具象サブクラスによって実装されます。
具象メソッド (具象メソッド
):具象メソッドは、抽象クラスまたは具象クラスによって宣言および実装され、そのサブクラスはオーバーライドまたは直接継承できます。
フックメソッド (Hook Method
): 判定用の論理メソッドやサブクラスで書き換える必要がある空メソッドも含めて抽象クラスに実装されています。 。一般的なフックメソッドは判定に使用される論理的なメソッドであり、メソッド名は一般的に isXxx 、戻り値の型は boolean です。
テンプレート メソッド: アルゴリズムのスケルトンを定義し、それに含まれる基本メソッドを特定の順序で呼び出します。
基本メソッド: アルゴリズムの各ステップを実装するメソッドです。基本メソッドは 3 つのタイプに分類できます。
コンクリート サブクラス (Concrete Class
): 抽象クラスで定義された抽象メソッドとフック メソッドを実装します。これらは、トップレベルのロジックの構成ステップです。
##【事例】
油を注ぐ、熱した油を注ぐ、野菜を注ぐ、調味料を注ぐ、ひっくり返すなど調理の手順が決まっています。 -フライなどの手順。ただし、さまざまな野菜やさまざまなソースを投入することもできます。次に、テンプレート メソッド モードを使用して、コードでシミュレーションします。public class TemplateTest { public static void main(String[] args) { //炒包菜 BaoCai baoCai = new BaoCai(); baoCai.cookProcess(); System.out.println("-------------"); //炒白菜 BaiCai baiCai = new BaiCai(); baiCai.cookProcess(); } } abstract class AbstractClass{ //抽象类 //模板方法定义 public final void cookProcess() { this.pourOil();//倒油 this.heatOil();//热油 this.pourVegetable();//倒蔬菜 this.pourSauce();//倒调味料 this.fry();//翻炒 } public abstract void pourVegetable();//倒蔬菜是不一样的(一个下包菜,一个是下白菜) public abstract void pourSauce();//倒调味料是不一样 public void pourOil() {System.out.println("倒油");} public void heatOil() {System.out.println("热油");} public void fry(){System.out.println("炒啊炒");} } class BaoCai extends AbstractClass{ public void pourVegetable() {System.out.println("加入包菜");} public void pourSauce() {System.out.println("加入辣椒酱");} } class BaiCai extends AbstractClass{ public void pourVegetable() {System.out.println("加入白菜");} public void pourSauce() {System.out.println("加入盐和味精");} }
【実行結果】
テンプレートメソッドで処理が終了しましたモードの利点と欠点Pour油油を熱します
キャベツを加えます
チリソースを加えます
炒めて炒めます
-------------
油を注ぎます
熱いです油
キャベツを加える
塩とMSGを加える
炒める終了コード0
利点:
1. コードの再利用性を向上させ、コードの同じ部分を抽象親クラスに配置し、異なるコードを異なるクラスに配置します。サブカテゴリ。 2. 逆制御を実現します。親クラスがそのサブクラスの操作を呼び出し、サブクラスの特定の実装を通じてさまざまな動作が拡張されます。逆制御が実現され、「開閉原則」に準拠します。 。欠点:
1. 異なる実装ごとにサブクラスを定義する必要があるため、クラス数の増加、システムの大型化、およびシステムの規模の拡大につながります。より抽象的なデザイン。 2. 親クラスの抽象メソッドはサブクラスによって実装されます。サブクラスの実行結果が親クラスの結果に影響を与えるため、制御構造が逆になり、コードの難易度が高くなります。読む。 使用シナリオ1. アルゴリズムの全体的なステップは非常に固定されていますが、個々の部分が不安定な場合は、テンプレート メソッド パターンを使用して、サブクラスの簡単に変更できる部分を抽象化できます。 。 2. 親クラスに対するサブクラスの逆制御を実現するには、サブクラスを使用して、親クラスのアルゴリズムの特定のステップが実行されるかどうかを決定する必要があります。以上がJava デザイン パターン: テンプレート メソッド パターンのサンプル分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。