デザインパターンのテンプレートメソッドモード
目次
3つ目は、テンプレートメソッドパターンの注意事項と詳細です。
1.基本的な紹介
1)テンプレートメソッドパターン(テンプレートメソッドパターン)は、テンプレートパターン(テンプレートパターン)とも呼ばれ、抽象クラスのzは、そのメソッドを実行するためのテンプレートを公に定義します。そのサブクラスは、必要に応じてメソッドをオーバーライドすることで実装できますが、呼び出しは抽象クラスで定義された方法で行われます。
2)簡単に言えば、テンプレートメソッドパターンは、動作中のアルゴリズムのスケルトンを定義し、サブクラスへのいくつかのステップを遅らせるので、サブクラスはアルゴリズムの構造を変更せずにアルゴリズムの特定のステップを再定義できます
3)このタイプのデザインパターンは行動パターンです。
2、アプリケーション例
2.1。豆乳の問題
2.2、UMLクラス図の設計
2.3、具体的な実現
豆乳抽象クラス:
//抽象类,表示豆浆
public abstract class SoyaMilk {
//模板方法, make , 模板方法可以做成final , 不让子类去覆盖.
final void make() {
select();
addCondiments();
soak();
beat();
}
//选材料
void select() {
System.out.println("第一步:选择好的新鲜黄豆 ");
}
//添加不同的配料, 抽象方法, 子类具体实现
abstract void addCondiments();
//浸泡
void soak() {
System.out.println("第三步, 黄豆和配料开始浸泡, 需要3小时 ");
}
void beat() {
System.out.println("第四步:黄豆和配料放到豆浆机去打碎 ");
}
}
RedBeanSoyaMilk:
public class RedBeanSoyaMilk extends SoyaMilk {
@Override
void addCondiments() {
// TODO Auto-generated method stub
System.out.println(" 加入上好的红豆 ");
}
}
PeanutSoyaMilk:
public class PeanutSoyaMilk extends SoyaMilk {
@Override
void addCondiments() {
// TODO Auto-generated method stub
System.out.println(" 加入上好的花生 ");
}
}
テスト:
public class Client {
public static void main(String[] args) {
// TODO Auto-generated method stub
//制作红豆豆浆
System.out.println("----制作红豆豆浆----");
SoyaMilk redBeanSoyaMilk = new RedBeanSoyaMilk();
redBeanSoyaMilk.make();
System.out.println("----制作花生豆浆----");
SoyaMilk peanutSoyaMilk = new PeanutSoyaMilk();
peanutSoyaMilk.make();
}
}
3つ目は、テンプレートメソッドパターンの注意事項と詳細です。
1)基本的な考え方は、アルゴリズムは1つの場所、つまり親クラスにのみ存在し、簡単に変更できるということです。アルゴリズムを変更する必要がある場合、親クラスのテンプレートメソッドまたは実装されているいくつかのステップを変更する限り、サブクラスはこれらの変更を継承します
2)コードの再利用を最大化します。親クラスのテンプレートメソッドと実装されているいくつかのステップは、子クラスに継承され、直接使用されます。
3)アルゴリズムを統合するだけでなく、優れた柔軟性も提供します。親クラスのテンプレートメソッドは、アルゴリズムの構造が変更されないことを保証しますが、サブクラスはいくつかのステップの実装を提供します。
4)このモデルの欠点:実装ごとにサブクラスの実装が必要です。これにより、クラスの数が増え、システムが大きくなります。
5)サブクラスがテンプレートメソッドをオーバーライドしないように、finalキーワードが一般的なテンプレートメソッドに追加されます。
6)テンプレートメソッドモードの使用シナリオ:プロセスを完了する場合、プロセスは一連のステップを実行する必要があります。この一連のステップは基本的に同じですが、個々のステップの実装が異なる場合があります。通常、テンプレートの使用を検討してください。対処するメソッドモード