定義:抽象クラスの定義は、その情報/テンプレートを行う方法が開示されています。達成するために必要に応じてそのサブクラスでは、メソッドをオーバーライドすることができますが、呼び出しは抽象クラスで定義されます。デザインパターンのこのタイプは、行動パターンを属します。
意図:サブクラスへのいくつかのステップを延期しながら、スケルトンアルゴリズムは、一回の操作で定義されています。テンプレートメソッドサブクラスが再定義するアルゴリズムのアルゴリズムの特定のステップの構造を変更しないことがあります。
主なソリューション: GMが、各サブクラスの再書き込み、このアプローチではいくつかの方法。
使用するときは:いくつかの一般的な方法があります。
解決方法:これらの一般的なアルゴリズムを抽象化します。
キーコード:抽象クラスの実装は、他のステップは、サブクラスで実装しました。
適用例: 1、家に内蔵された、基盤、配線、水配管は、建物の唯一の違いクローゼットプラスプラスフェンスの後半に、同じです。図2に示すように、旅仏は、最上位の論理スケルトン81難しい良いが、そこに与えられました。3、休止状態のサポートでは春、およびセッションを取得するために、トランザクションを開くようなカプセル化するために、いくつか与えられている良い方法は、セッションが閉じているというように、プログラマはこれらの既に書き込みの良いコードの規範を繰り返さない、直接スローは、エンティティを保存することができます。
利点: 1、パッケージ、可変延長部分の同じ部分。2、メンテナンスが容易、共通のコードを抽出します。3、親クラスによって挙動制御、サブクラスを達成しました。
短所:各システムは、より嵩高い作り、クラス数の増加をもたらす、サブクラスを実装するために異なる実装を必要とします。
使用する: 1、メソッドの一般的なサブクラスの数、および同じロジックを。2、重要な、複雑な方法は、テンプレートメソッドとして考えることができます。
注意:悪質な操作、一般的なテンプレートメソッドに加えて、最終的なキーワードを防ぐために。
例えば
ステップ1は、 テンプレートメソッドが最終的に設定されていることを抽象クラスを作成します。
public abstract class Game {
abstract void initialize();
abstract void startPlay();
abstract void endPlay();
//模板
public final void play(){
//初始化游戏
initialize();
//开始游戏
startPlay();
//结束游戏
endPlay();
}
}
ステップ2 ここでは、クラス以上のエンティティクラスの拡張を作成するためには、ゲームについての他のクラスに拡張されていません
public class Cricket extends Game {
@Override
void endPlay() {
System.out.println("Cricket Game Finished!");
}
@Override
void initialize() {
System.out.println("Cricket Game Initialized! Start playing.");
}
@Override
void startPlay() {
System.out.println("Cricket Game Started. Enjoy the game!");
}
}
ステップ3 使用 のゲーム プレイのテンプレートメソッド()ゲームを実証するための定義された方法です。
public static void main(String[] args) {
Game game = new Cricket();
game.play();
System.out.println();
game = new Football();
game.play();
}