テンプレートメソッドデザインパターン(A)

すべての友達の前での学習は、ことを知っているこれまでのところ、私たちの問題はターンアラウンドをカプセル化している。我々はすでに、今どのようなオブジェクトの作成、メソッド呼び出し、複雑なインターフェース、アヒル、ピザ...それをカプセル化していますか

サブクラスは、任意の時点でに業務にフックすることができるように私たちは、徹底したカプセル化アルゴリズムのブロックになります。私たちも、ここに学び、ハリウッドの影響に触発設計原理。

コーヒーや紅茶を飲みます

一部の人々はコーヒーを飲むのが好き、何のコーヒーは人生がつまらないと感じるん。一部の人々はお茶を飲むのが好き。まあ、同じお茶で、二人は共通で何か何を持っていませんか?実際には、両方の醸造方法に非常に似ています。そのようなものとして

  1. コーヒー醸造方法
  • (1)沸騰水
  • (2)沸騰したコーヒーと
  • (3)カップコーヒー
  • (4)砂糖とミルク
  1. お茶の醸造方法
  • (1)沸騰水
  • (2)沸騰した水浸でお茶を
  • (3)ティーカップに注ぎ
  • (4)レモン

コーヒーと紅茶は、コードを変換し、次のとおりです。

public class Coffee {
    void prepareRecipe() {
        boilWater();
        brewCoffeeGrinds();
        pourInCup();
        addSugarAndMilk();
    }

    public void boilWater() {
        System.out.println("Boling water");
    }

    public void brewCoffeeGrinds() {
        System.out.println("Dripping Coffee through filter");
    }

    public void pourInCup() {
        System.out.print("Pouring into cup");
    }

    public void addSugarAndMilk() {
        System.out.println("Adding Sugar and Milk");
    }
}

public class Tea {
    void prepareRecipe() {
        boilWater();
        steepTeaBag();
        pourInCup();
        addLemon();
    }

    public void boilWater() {
        System.out.println("Boiling water");
    }

    public void steepTeaBag() {
        System.out.println("Steeping the tea");
    }

    public void addLemon() {
        System.out.println("Adding Lemon");
    }

    public void pourInCup() {
        System.out.println("Pouring into cup");
    }
}

お茶は似ているので、そこにコード内の場所であること、共有、および与える私たちは、デザインの初版と同様に、次のようにすることができ、というヒント:

また、デザイン

したがって、上記のコードとクラス図、コーヒーや紅茶を見てだけでなく、一般的な他の何?のは、醸造方法を開始することから始めましょう。

  1. お湯を沸かします
  2. ホットコーヒーまたは紅茶付き
  3. 飲料をカップに注ぎ
  4. 飲料中の適切なスパイスを追加します。

それは見ることができ、そして1〜4は、ベースクラスに、抽出されました。2と3は出てきませんでしたが、彼らは本質的には同じですが、異なる飲料の何に使用されます。

そこで、我々は潜在的なprepareRecipe()もそれを抽象化がありますか?はい、私たちはああ、することができます

抽象prepareRecipe()

  1. お茶はsteepTeaBag()とaddLemon()を使用しながら、私たちが直面する最初の問題は、コーヒー使用brewCoffeeGrinds()とaddSuagrAndMilk()メソッドということです。

私たちは、急勾配や醸造気泡が運動であることがわかった。addSugarAndMilkとaddLemonはスパイスを追加しているので、彼らは醸造()とaddCondimentsに統一された()も

  1. 今、私たちは新しいprepareRecipe()メソッドを持っているが、それはコードに準拠できるようにする必要があります。そうするために、我々はCaffeineBeveage(カフェイン)スーパースタートを開始します
public abstract  class CaffeineBeverage {
    final void prepareRecipe() {

    }

    abstract  void brew();

    abstract  void addCondiments();

    void boilWater() {
        System.out.println("Boiling water");
    }

    void pourInCup() {
        System.out.println("Pouring into cup");
    }
}
  1. 最後に、我々は、コーヒーや紅茶に対処する必要があります。どちらのクラスは、醸造方法を扱うようになりましスーパークラス(カフェイン)に依存しており、我々は唯一の醸造に対処し、自分の一部にスパイスを追加する必要があります。
public class Tea extends CaffeineBeverage {
    public void brew() {
        System.out.println("Steeping the tea");
    }
    public void addCondiments() {
        System.out.println("Adding Lemon");
    }
}

public class Coffee extends CaffeineBeverage {
    public void brew() {
        System.out.println("Dripping Coffee through filter");
    }
    public void addCondiments() {
        System.out.println("Adding Sugar and Milk");
    }
}

だから我々は、このプロセスで何をしますか?図比喩本は説明するための小さなシリーズを提供します:

テンプレートの方法を理解します

実際には、我々は我々が学ばなければならないプロセス・テンプレートの方法で使用している、prepareRecipe()メソッドは、私たちのテンプレートです。なぜ?

  • 結局のところ、それは方法であり、
  • それは、この場合には、テンプレートアルゴリズムとして使用され、アルゴリズムは、コーヒーや紅茶を作るために使用されます

この方法は、テンプレートは、アルゴリズムを定義し、サブクラスは、1つのまたは複数のステップの実装を提供可能にするステップ

私たちはお茶を飲みましょう

私たちは、このテンプレートメソッドの動作を追跡するために、どのように、お茶を作るためにステップバイステップでみましょう。あなたは、アルゴリズムにおけるいくつかの方法を学びます、テンプレートメソッドは、アルゴリズムを制御します。これは、サブクラスが特定のステップの実現を提供することができます

  1. まず、私たちは、お茶のオブジェクトを必要とします
Tea myTea = new Tea();
  1. その後、我々は、テンプレートメソッドを呼び出します
myTea.prepareRecipe();
  1. お湯を沸かします
boilWater();

这件事情是在超类中进行的
  1. 次に我々は、お茶を作るためにのみサブクラスが行う方法を知ることができ、この事を必要とします
brew();
  1. すべてのドリンク慣行が同じであるので、これはスーパークラスで起こった、今ティーカップを注ぎます
pourInCup();
  1. 調味料が独特であるとして、サブクラスがそれを実装することにより、最後に、私たちは、それぞれの飲み物に、スパイスを追加します
addCondiments();

上記のプロセスの後、我々の初期テンプレートメソッドパターン学習します。:今日の記事尾では、我々はこのテンプレートメソッドパターン定義
テンプレート方法:サブクラスにいくつかのステップを延期しながら、この方法では、アルゴリズムのスケルトンを定義します。アルゴリズムの構造を変更せずにテンプレートの方法、そのようなサブクラスは、アルゴリズムのステップのいくつかが再定義されます。

このモードでは、モジュールのアルゴリズムを作成することはありません。モジュールとは何ですか?あなたが見ることができるように、それはテンプレートメソッドです。より具体的には、アルゴリズムの方法は、ステップのセットとして定義され、任意のステップは、抽象的であってもよく、それは、サブクラスの実装を担当します。このアルゴリズムは、部分的にサブクラスによって達成を提供しながら、構造は、変わらないままであることを保証することができます。

さて、今日の研究では、最初にここに来ます。今日テンプレートメソッドパターンの唯一の予備的研究は、そこより多くの材料の道、そこに次の時間であるか、または四角形になります。

愛の生活、学習と知覚の愛は、愛を蹴りました

おすすめ

転載: www.cnblogs.com/dimple91/p/10973159.html