一般的なデザインモード----テンプレート方法モード


package org.design.patterns;

/**
 *       :                ,            。
 *                     ,            。
 */
//   
public abstract class AbstractTemplateMethod {
 /**
  *               ,     final   ,                       
  */
 final void templateMethod() {
  // "  "         
  primitiveOperation1();
  primitiveOperation2();
  primitiveOperation3();
  // "  "         
  concreteOperation();
  // "  "         
  hook();
 }

 /**          */
 abstract void primitiveOperation1();

 abstract void primitiveOperation2();

 abstract void primitiveOperation3();

 //             ,       final,        
 final void concreteOperation() {
  System.out.println("AbstractTemplateMethod.concreteOperation()");
 }

 //     ,   ,                ,        
 void hook() {
 }

}

//   
class TemplateMethodImpl extends AbstractTemplateMethod {

 @Override
 void primitiveOperation1() {
  System.out.println("TemplateMethodImpl.primitiveOperation1()");
 }

 @Override
 void primitiveOperation2() {
  System.out.println("TemplateMethodImpl.primitiveOperation2()");
 }

 @Override
 void primitiveOperation3() {
  System.out.println("TemplateMethodImpl.primitiveOperation3()");
 }

 @Override
 void hook() {//     
  super.hook();
 }
 
//    public static void main(String[] args) {
//    new TemplateMethodImpl().templateMethod(); 
// }
}
//===========================================================================
/*
 *       :
 * 
 *     :              (          ,        )
 * 
 *   :                   ,                 (        "  "   )
 * 
 *     :             (                          )
 * 
 */
/*
 *   :
 * -"    "        ,           
 * -             、             
 * -              ,        final   
 * -               ,     ,     
 * -                
 * 
 */