您的位置:首页 > 其它

行为模式: Template Method(模板方法)

2013-02-07 21:03 393 查看


abstract class Generalization {
// 1. Standardize the skeleton of an algorithm in a "template" method
public void findSolution() {
stepOne();
stepTwo();
stepThr();
stepFor();
}
// 2. Common implementations of individual steps are defined in base class
protected void stepOne() { System.out.println( "Generalization.stepOne" ); }
// 3. Steps requiring peculiar impls are ";placeholders" in the base class
abstract protected void stepTwo();
abstract protected void stepThr();
protected void stepFor() { System.out.println( "Generalization.stepFor" ); }
}

abstract class Specialization extends Generalization {
// 4. Derived classes can override placeholder methods
// 1. Standardize the skeleton of an algorithm in a "template" method
protected void stepThr() {
step3_1();
step3_2();
step3_3();
}
// 2. Common implementations of individual steps are defined in base class
protected void step3_1() { System.out.println( "Specialization.step3_1" ); }
// 3. Steps requiring peculiar impls are "placeholders" in the base class
abstract protected void step3_2();
protected void step3_3() { System.out.println( "Specialization.step3_3" ); }
}

class Realization extends Specialization {
// 4. Derived classes can override placeholder methods
protected void stepTwo() { System.out.println( "Realization   .stepTwo" ); }
protected void step3_2() { System.out.println( "Realization   .step3_2" ); }
// 5. Derived classes can override implemented methods
// 6. Derived classes can override and "call back to" base class methods
protected void stepFor() {
System.out.println( "Realization   .stepFor" );
super.stepFor();
}  }

class TemplateMethodDemo {
public static void main( String[] args ) {
Generalization algorithm = new Realization();
algorithm.findSolution();
}  }

Generalization.stepOneRealization
.stepTwoSpecialization.step3_1Realization .step3_2Specialization.step3_3Realization .stepForGeneralization.stepFor



List of Template Method examples

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: