Template Methodパターンは非常に一般的なパターンですが、テンプレートメソッドは、多くの実装を持っているので、また、我々は、鋭い目のペアを持っている必要がありますが、彼らは同じデザインを見て、必ずしも本について話をされていません。
作成フレームワークを、このモデルは単純に素晴らしいですので、このパターンが一般的です。詳しくアルゴリズムあなたの各ステップを指定物事を行う方法の枠組みが、(このフレームワークを使用する人)フレームワークによって制御されます。
テンプレート法によるソート
私たちは、多くの場合、何かをする配列が必要?はい!ソート。
Javaの配列クラスの設計者は、テンプレートのソートに使用する便利な方法をご提供しています。このメソッドの実行方法を見てみましょう:
、ここではJavaのソースコードの一部である機能の並べ替えを提供するために、2つの方法があります。
public static void sort(Object[] a) {
Object aux[] = (Object[])a.clone();
mergeSort(aux, a, 0, a.length, 0);
}
private static void mergeSort(Object[] src, Object[] dest,int low,int high, int off) {
// 这里省略其他实现
int length = high - low;
if (length < INSERTIONSORT_THRESHOLD) {
for (int i=low; i<high; i++)
for (int j=i; j>low &&
((Comparable) dest[j-1]).compareTo(dest[j])>0; j--)
swap(dest, j, j-1);
return;
}
// 这里省略其他实现
}
ソートアヒル
あなたはどのように行うだろう、アヒルの配列をソートする必要があるご参加ください!ソートテンプレートの方法は、アルゴリズムの配列を提供してきましたが、あなたはアヒルを比較する方法を知っているテンプレートの方法をしなければなりません。あなたはそれがのcompareTo()メソッドを実装することであるしなければなりません。
何が起こったことは、このでした:ソート()メソッドは、設計者は、任意の配列は、このメソッドを使用することができ、アレイのすべてのために、そう、彼らは静的メソッドの並べ替え、この方法であることが判明することを願っています。しかし、それは問題ではない、それを使用することであり、それは、スーパークラスで定義されているのと同じです。さて、あなたを伝えるために1つの詳細があります:ソートは本当にスーパークラスで定義されていないため、そのソート方法は、それ以外の場合は、ソートすることができない、あなたはこのcompareToメソッドを達成していることを知っている必要があります。
これを達成するために、設計者は、Comparableインタフェースを使用します。あなたはこのインタフェースを実装する必要があり、この方法は、のcompareTo()で宣言したインターフェースを提供します。
public class Duck implements Comparable<Duck> {
String name;
int weight;
public Duck(String name, int weight) {
this.name = name;
this.weight = weight;
}
public String toString() {
return name + " weighs " + weight;
}
public int compareTo(Duck object) {
Duck otherDuck = object;
if (this.weight < otherDuck.weight) {
return -1;
} else if (this.weight == otherDuck.weight) {
return 0;
} else { // this.weight > otherDuck.weight
return 1;
}
}
}
のは、このプログラムをテストしてみましょう
public class DuckSortTestDrive {
public static void main(String[] args) {
Duck[] ducks = {
new Duck("Daffy", 8),
new Duck("Dewey", 2),
new Duck("Howard", 7),
new Duck("Louie", 2),
new Duck("Donald", 10),
new Duck("Huey", 2)
};
System.out.println("Before sorting:");
display(ducks);
Arrays.sort(ducks);
System.out.println("\nAfter sorting:");
display(ducks);
}
public static void display(Duck[] ducks) {
for (Duck d : ducks) {
System.out.println(d);
}
}
}
カモの一種の内部の仕組みを観察
私たちは、プロセスの追跡テンプレートメソッドソートArrayクラスを作業してみましょう。私たちは、それが実装ステップアヒルを提供することが必要とどのようにテンプレートメソッドは、制御アルゴリズムであるかを確認し、ある時点でのアルゴリズムでよ
- まず、我々は、アヒルの配列が必要
- 次にArrayクラスのテンプレートメソッドをソート、およびアヒルの配列を渡します
- 配列全体がソートされるまで、配列をソートしたい、あなたは、何度も何度も2つの項目を比較する必要があります
- 注文は、特定のメソッドを使用するには、アヒルは、両方のアレイスワップを交換していない場合
- アレイ全体の順序が正しくなるまで、ソート方法は、アヒルを比較して調整していき
これはまた、それを達成するためのテンプレート方式の一種で、非常に驚いていないです。テンプレートメソッドは教科書ではなく、その実装は、テンプレートメソッドパターンの精神に沿ったもので、まだですが。Java APIでは、あなたはまた、他のを見ることができます。(バイトB []、int型Java.ioような入力ストリームクラスは、read()メソッドは、サブクラスによって実装されており、この方法は、読み取られるオフ、INT LEN) テンプレートを使用する方法。
テンプレートと戦略モデルがパッケージ化された組み合わせは、継承との組み合わせは、あなたはまだそれを考え出した、ありですね。あなたはまだあまりにも一般的であれば、その後、小扁あなた慎重に開いた本「ヘッドファーストデザインパターンは」それのこの章を見て、我々は説明します。
設計ツールボックス
要約までの時間
OOの基礎
抽象化、カプセル化、継承、ポリモーフィズム
OOの原則
変更パッケージ
多目的組み合わせ、以下の継承
プログラミングのためではなく、プログラミングを実現するためのインタフェース
設計オブジェクトとワークとの疎結合の相互作用
リライアンスの要約は、特定のカテゴリに依存しません
クラスは、拡張のために開いている必要があり、修正のため閉鎖
そして、唯一の友人に話して
(私はあなたを見つけるでしょう、私のために見ていない私たちの最新の原則は、彼らが自然にサブクラス呼び出す必要があるとき、すべてのスーパークラスのマスターで、あなたを思い出されたハリウッドのような)
そして、唯一の友人に話して
OOモデル
「戦略モード 『』オブザーバーモード 『』 Decoratorパターン」、 『Abstract Factoryパターン』、 『Factory Methodパターン』、 『シングルトン』、 『コマンドモード』、 『アダプタモード』、 『ルックモード』
「Template Methodパターン骨格における方法のアルゴリズムの定義における」サブクラスのいくつかのステップを延期しつつ。アルゴリズムの構造を変更せずにテンプレートの方法、そのようなサブクラスは、アルゴリズムのステップのいくつかが再定義されます。
テンプレートメソッドパターンを完了した後、小扁は知っている、デザインモードで元が頻繁に平時に使用される、彼はまた、学習する前に、重要な位置を占めている、小さなシリーズはそれを完全に認識していません。これは最終的にこのモードに入ると、知識の埋蔵するだけでなく、ゆっくりとああ消化します。
次回は、私たちは世界のイテレータと組み合わせモードに入りました。
愛の生活、学習と知覚の愛は、愛を蹴りました