JAva設計モードの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