模板方法:
写一个抽象类,这个抽象类有多个抽象方法,里面设立一个模板方法,这个模板方法也可以称之为模板算法,设立不同方法的执行顺序,封装业务流程,暴露出去;
模板方法模式的特点很好总结,它将一般性的可复用的行为由基类固化,而把特殊化的行为交由具体的子类来实现。具体来说:
- 子类通常不关心全局(比如整个流程、提纲、步骤),而只负责”填空“;”填空“通过实现或重写父类的方法来实现。
- 从父类角度,全局性的规范约束掌握在自己手中(完形填空),具体来说通过模板方法来约束,从而能够尽量简化子类的复杂度。父类并不一定是抽象类(聚合接口,然后模板方法里去组织接口方法,延迟实现),模板方法也并不一定是抽象方法(子类重写父类)。
钩子方法:寻找挂载点,比如上面的模板方法,里面的具体方法实现,是暴露给子类,或成员的,子类实现会影响父类的模板算法
简单钩子eg:
public class PlayGame {
public static void playGame(Game game){
System.out.println("打开机器");
System.out.println("打开外挂");
System.out.println("加速器...");
//开始游戏
game.play();//钩子
System.out.println("存档...");
}
public static void main(String[] args){
playGame(new LOL());
}
} class LOL implements Game{
public void play(){
System.out.println("开始 LOL ing");
}
}
class WOW implements Game{
public void play(){
System.out.println("开始 WOW ing");
}
} /***
* 创建一个Game接口
*/
public interface Game {
void play();
}