设计模式---模板方法模式
1、定义
在抽象基类定义final修饰的方法封装算法骨架,并实现其中的共性的步骤;某些没有共性的步骤(可定义为protected或默认的abstract方法)延迟到子类实现。这样做可以在不改变算法骨架的同时,又能在后期实现算法骨架中的非共性步骤。
2、具体实现
模板方法模式结构
准备一个抽象类,将部分逻辑以具体方法的形式实现,然后声明一些抽象方法交由子类实现剩余逻辑,用钩子方法给予子类更大的灵活性。最后将方法汇总构成一个不可改变的模板方法
1、定义抽象基类 使用final修饰1.1、实现方法(通用共同属性)声明为私有方法1.2、抽象方法(延迟方法) 声明为protected或包访问权限1.3、钩子方法(扩展点)1.4、模板方法 使用final修饰,使得其不能被子类复写2、子类
2.1、实现基类中的抽象方法2.2、覆盖钩子方法
用钩子函数实现子类对算法框架个性化的扩展思想
1、框架通过提供一个个的钩子,使框架具备了更大的灵活性。不想执行算法框架中的某些个步骤,我们可以脱钩,如果想执行的话,我们可以挂钩。
实现
2、在抽象类中,提供protected钩子方法。这是个实现的或空的方法。这样子类就可以选择覆写-持钩,也可以选择不覆写-脱勾。使用3、提供一个isXXX类型的钩子方法。用该方法控制算法框架中某个步骤是否执行4、子类不覆写这个方法,就是脱钩,仍按框架逻辑执行,一旦覆写,就是挂钩,将改变框架算法方向,按子类逻辑执行。
3、适用场景
1、算法或操作遵循相似的逻辑2、重构时(把相同的代码抽取到父类中)3、重要、复杂的算法,核心算法设计为模板算法4、优点、缺点
1、封装性好2、复用性好3、屏蔽细节4、便于维护
1、单继承