// duynotes blog
public abstract class PastaDish {
  final void makeRecipe() {
    boilWater();
    addPasta();
    cookPasta();
    drainAndPlate();
    addSauce();
    addProtein();
    addGarnish();
  }
  abstract void addPasta();
  abstract void addSauce();
  abstract void addProtein();
  abstract void addGarnish();
  private void boilWater() {
    System.out.println("Boiling water");
  }
  //…
}