すべての友達の前での学習は、ことを知っているこれまでのところ、私たちの問題はターンアラウンドをカプセル化している。我々はすでに、今どのようなオブジェクトの作成、メソッド呼び出し、複雑なインターフェース、アヒル、ピザ...それをカプセル化していますか?
サブクラスは、任意の時点でに業務にフックすることができるように私たちは、徹底したカプセル化アルゴリズムのブロックになります。私たちも、ここに学び、ハリウッドの影響に触発設計原理。
コーヒーや紅茶を飲みます
一部の人々はコーヒーを飲むのが好き、何のコーヒーは人生がつまらないと感じるん。一部の人々はお茶を飲むのが好き。まあ、同じお茶で、二人は共通で何か何を持っていませんか?実際には、両方の醸造方法に非常に似ています。そのようなものとして
- コーヒー醸造方法
- (1)沸騰水
- (2)沸騰したコーヒーと
- (3)カップコーヒー
- (4)砂糖とミルク
- お茶の醸造方法
- (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〜4は、ベースクラスに、抽出されました。2と3は出てきませんでしたが、彼らは本質的には同じですが、異なる飲料の何に使用されます。
そこで、我々は潜在的なprepareRecipe()もそれを抽象化がありますか?はい、私たちはああ、することができます。
抽象prepareRecipe()
- お茶はsteepTeaBag()とaddLemon()を使用しながら、私たちが直面する最初の問題は、コーヒー使用brewCoffeeGrinds()とaddSuagrAndMilk()メソッドということです。
私たちは、急勾配や醸造気泡が運動であることがわかった。addSugarAndMilkとaddLemonはスパイスを追加しているので、彼らは醸造()とaddCondimentsに統一された()も
- 今、私たちは新しい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");
}
}
- 最後に、我々は、コーヒーや紅茶に対処する必要があります。どちらのクラスは、醸造方法を扱うようになりましスーパークラス(カフェイン)に依存しており、我々は唯一の醸造に対処し、自分の一部にスパイスを追加する必要があります。
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つのまたは複数のステップの実装を提供可能にするステップ。
私たちはお茶を飲みましょう
私たちは、このテンプレートメソッドの動作を追跡するために、どのように、お茶を作るためにステップバイステップでみましょう。あなたは、アルゴリズムにおけるいくつかの方法を学びます、テンプレートメソッドは、アルゴリズムを制御します。これは、サブクラスが特定のステップの実現を提供することができます
- まず、私たちは、お茶のオブジェクトを必要とします
Tea myTea = new Tea();
- その後、我々は、テンプレートメソッドを呼び出します
myTea.prepareRecipe();
- お湯を沸かします
boilWater();
这件事情是在超类中进行的
- 次に我々は、お茶を作るためにのみサブクラスが行う方法を知ることができ、この事を必要とします
brew();
- すべてのドリンク慣行が同じであるので、これはスーパークラスで起こった、今ティーカップを注ぎます
pourInCup();
- 調味料が独特であるとして、サブクラスがそれを実装することにより、最後に、私たちは、それぞれの飲み物に、スパイスを追加します
addCondiments();
上記のプロセスの後、我々の初期テンプレートメソッドパターン学習します。:今日の記事尾では、我々はこのテンプレートメソッドパターン定義
テンプレート方法:サブクラスにいくつかのステップを延期しながら、この方法では、アルゴリズムのスケルトンを定義します。アルゴリズムの構造を変更せずにテンプレートの方法、そのようなサブクラスは、アルゴリズムのステップのいくつかが再定義されます。
このモードでは、モジュールのアルゴリズムを作成することはありません。モジュールとは何ですか?あなたが見ることができるように、それはテンプレートメソッドです。より具体的には、アルゴリズムの方法は、ステップのセットとして定義され、任意のステップは、抽象的であってもよく、それは、サブクラスの実装を担当します。このアルゴリズムは、部分的にサブクラスによって達成を提供しながら、構造は、変わらないままであることを保証することができます。
さて、今日の研究では、最初にここに来ます。今日テンプレートメソッドパターンの唯一の予備的研究は、そこより多くの材料の道、そこに次の時間であるか、または四角形になります。
愛の生活、学習と知覚の愛は、愛を蹴りました