JAva設計モードの1つ:テンプレートモード
一つの言葉:論理は同じで、具体的に異なることを実現します
1.シーンの使用
a.複数のサブクラスには共通の方法があり、論理は基本的に同じである.
b.再構築、同じコードを親に抽出する
2.メリット
a.不変のアルゴリズムは親クラスにカプセル化され、変化した部分は子クラスに置かれ、拡張が便利である.
b.公共部分を抽出し、メンテナンスしやすい.
c.具体的な論理は親によって実現され、子によって具体的な方法を実現する.
3.短所
a.子類の行為は親類に影響を及ぼし、子類の実行結果は親類の結果に影響する.
b.初心者にとって、読みにくい.
4.具体的な応用
servlet,struts,mybatis,springなど、非常に広く応用されています.
5.コード例
参考資料:
1.秦小波『設計モードの禅』機械工業社2010.1
1.シーンの使用
a.複数のサブクラスには共通の方法があり、論理は基本的に同じである.
b.再構築、同じコードを親に抽出する
2.メリット
a.不変のアルゴリズムは親クラスにカプセル化され、変化した部分は子クラスに置かれ、拡張が便利である.
b.公共部分を抽出し、メンテナンスしやすい.
c.具体的な論理は親によって実現され、子によって具体的な方法を実現する.
3.短所
a.子類の行為は親類に影響を及ぼし、子類の実行結果は親類の結果に影響する.
b.初心者にとって、読みにくい.
4.具体的な応用
servlet,struts,mybatis,springなど、非常に広く応用されています.
5.コード例
/**
* ,
* @author Mid Lee
* @date 2013-12-01
*/
public abstract class ModelTemplete {
// protected ,
protected abstract void method1();
protected abstract void method2();
// , final ,
final public void templateMethod(){
this.method1();
this.method2();
}
}
/**
* 1
*/
public class ModelTempleteConcrete1 extends ModelTemplete {
@Override
protected void method1() {
System.out.println("Concrete1 method1...");
}
@Override
protected void method2() {
System.out.println("Concrete1 method2...");
}
}
/**
* 2
*/
public class ModelTempleteConcrete2 extends ModelTemplete {
@Override
protected void method1() {
System.out.println("Concrete2 method1...");
}
@Override
protected void method2() {
System.out.println("Concrete2 method2...");
}
}
/**
*
* :
* Concrete1 method1...
* Concrete1 method2...
* Concrete2 method1...
* Concrete2 method2...
* @author Mid Lee
* @date 2013-12-01
*/
public class ModelTempleteTest {
public static void main(String[] args) {
ModelTemplete a = new ModelTempleteConcrete1();
ModelTemplete b = new ModelTempleteConcrete2();
//
a.templateMethod();
b.templateMethod();
}
}
参考資料:
1.秦小波『設計モードの禅』機械工業社2010.1