模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。多线程中thread中的start方法实际调用了run方法,run方法程序员实现或不实现。
工厂方法是特殊的模板方法。
好莱坞原则:将决策权放在高层模块中,以便决定如何以及何时调用低层模块。
Arrays.sort()模板方法,需要实现comparable接口。 InputStream中的read方法
public abstract class TemplateMethod{
final void templateMethod(){
primitiveOperation1();
primitiveOperation2();
concreteOperation();
hook();
}
abstract void primitiveOperation1();//这两个方法定义成抽象,由具体子类实现
abstract void primitiveOperation2();
final void concreteOperation(){ //final,子类无法覆盖它。可被模板方法直接使用或者被子类使用
System.println.out("我是实现方法");
}
boolean hook(){return true;}//“默认不做事的方法”,钩子,子类可以视情况决定要不要覆盖它们。
}
public abstract class CaffeineBeverageWithHook{
void prepareRecipe(){
boilWater();
brew();
pourInCup();
if(customerWantsCondiments()){
addCondiments();
}
}
abstract void brew();
abstract void addCondiments();
void boilWater(){System.println.out("Boiling water")};
void pourInCup(){System.println.out("Pour In Cup")};
boolean customerWantsCondiments(){return true;}
}