优势:算法
① 定义了一个算法骨架或行为族,而将一些步骤延迟到子类中,能够把公共的代码移到父类里面,从而避免代码重复。app
② 具体细节步骤实现定义在子类中,使得子类能够不改变一个算法的总体结构便可以从新定义该算法的某些特定步骤。ui
缺点:spa
① 客户端必须知道全部的策略类,并自行决定使用哪个策略类。code
② 因为策略模式把每一个具体的策略实现都单独封装成为类,若是备选的策略不少的话,那么对象的数目就会很可观。对象
适用范围:blog
算法,折扣活动等接口
客户端: it
DodishTemplate eggsWithTomato = new EggsWithTomato(); //西红柿炒鸡蛋
eggsWithTomato.doDish();
System.out.println("-----------------------------");
DodishTemplate bouilli = new Bouilli(); //红烧肉
bouilli.doDish();模板
一句话归纳:定义一个操做的算法骨架,而将一些步骤延迟到子类中,模板方法使得子类能够不改变一个算法的结构便可以从新定义该算法的某些特定步骤。
/** * DodishTemplate (作菜模板接口,备料、作菜和上菜方法,及总体过程的方法doDish()) * EggsWithTomato(西红柿炒鸡蛋) Bouilli(红烧肉) -- 两个实例,同一模板作出不一样的菜 */