动机:创建一个复杂的对象,这个对象各个部分剧烈变化,但是组合到一起却相对稳定(跟Template Method很像)
public class templateMethodTest{
private void step1(){ ... }
private void step2(){ ... }
private void step3(){ ... }
private void step4(){ ... }
private void step5(){ ... }
public void run(){
step1();
step2();
step3();
step4();
step5();
}
}
class test implements templateMethodTest{
@Override
private void step1(){ ... }
@Override
private void step2(){ ... }
@Override
private void step3(){ ... }
@Override
private void step4(){ ... }
@Override
private void step5(){ ... }
}
public class test extends templateMethodTest{
public static void main(String[] args){
templateMethodTest tm=new test();
tm.run();
}
}
这里可以优化,分离步骤执行顺序和分步骤具体实现
public class templateMethodTest{
public templateMethodTest(){
//这里这样写是不行的,因为c++调用子类构造函数时会调用父类的构造函数,而这时子类继承的方法并没有读取到,所以这里调用的是父类的接口,所以会报错,JAVA不会
this.step1();
this.step2();
this.step3();
this.step4();
this.step5();
}
private void step1(){}
private void step2(){}
private void step3(){}
private void step4(){}
private void step5(){}
}
class director{
templateMethodTest templateMethodTest;
public director(templateMethodTest temp){
this.templateMethodTest=temp;
}
public void run(){
templateMethodTest.step1();
templateMethodTest.step2();
templateMethodTest.step3();
templateMethodTest.step4();
templateMethodTest.step5();
}
}
//c++没办法在构造函数中调用,则分离出来
class test implements templateMethodTest{
@Override
private void step1(){ ... }
@Override
private void step2(){ ... }
@Override
private void step3(){ ... }
@Override
private void step4(){ ... }
@Override
private void step5(){ ... }
}
public class test extends templateMethodTest{
public static void main(String[] args){
templateMethodTest tm=new test();
tm.run();
}
}