3

について読んでいTemplate design patternます。私の現在の理解によると、順番に実行される一連のプロセス(メソッド)が定義されたアルゴリズムがある場合、テンプレートデザインパターンを使用できます。主なプレーヤーは

1.プロセス (メソッド) と実行順序の定義Abstract Template classを提供します。template method通常、このメソッドは最終的なものになるため、その動作は変更されません。テンプレート メソッドで言及されているプロセス (メソッド) のいくつかはデフォルトの実装で提供され、Abstract テンプレート クラス タイプを拡張する具象クラスに依存するその他のプロセスは抽象として残されます。

2. Concrete classes extending the Template method. これらは、必要に応じてデフォルトのメソッドをオーバーライドし、Abstract Template クラスで定義された抽象メソッドの実装を提供します。

JDKでの実装を検索してみましたjava.io。これらのクラスがこのパターンを実装していることを読んだ後、クラスを調べました。一連のプロセス (メソッド) と実行順序を定義するメソッドを見つけることができませんでした。

貴重な情報を提供してください。

4

2 に答える 2

4

簡単な例は次のとおりですjava.io.OutputStream

テンプレートの方法は
public void write(byte b[], int off, int len).

のサブクラスで実装する必要がある抽象メソッド
public abstract void write(int b)を 呼び出します。
OutputStream

この場合、テンプレートの不変部分は、すべてOutputStreamの に共通する基本的なエラー処理であり、テンプレートのバリアント部分は、具体的な実装ごとに固有の実際の記述です。

パターンに対するあなたの理解は正しいです。ただし、それほど複雑である必要はありません。基本的に、同じクラスで抽象メソッドを呼び出す具象メソッドはすべてテンプレート メソッドです。

于 2016-02-22T17:53:44.630 に答える
2

もう少し詳しく言うと:

実装内で抽象メソッドを呼び出す非抽象メソッドは、テンプレート メソッドとして分類できます。

Template_methodは、操作のアルゴリズムのプログラム スケルトンを定義し、いくつかのステップをサブクラスに任せます。完全な操作を抽象メソッドとして定義すると、サブクラスはアルゴリズムのスケルトンを変更するための完全な制御を持つようになるため、抽象メソッドは Template メソッドとして分類されません。

たとえば、IO のReaderクラス。

 public int read() throws IOException {
        char cb[] = new char[1];
        if (read(cb, 0, 1) == -1) // this is an abstract method
            return -1;
        else
            return cb[0];
    }

ここ

abstract public int read(char cbuf[], int off, int len) throws IOException;抽象メソッドです。

このメソッドの実装はBufferedReaderにあります

public int read(char cbuf[], int off, int len) throws IOException {

}
于 2016-08-03T10:20:03.070 に答える