模板方法:
寫一個抽象類,這個抽象類有多個抽象方法,里面設立一個模板方法,這個模板方法也可以稱之為模板算法,設立不同方法的執行順序,封裝業務流程,暴露出去;
模板方法模式的特點很好總結,它將一般性的可復用的行為由基類固化,而把特殊化的行為交由具體的子類來實現。具體來說:
- 子類通常不關心全局(比如整個流程、提綱、步驟),而只負責”填空“;”填空“通過實現或重寫父類的方法來實現。
- 從父類角度,全局性的規范約束掌握在自己手中(完形填空),具體來說通過模板方法來約束,從而能夠盡量簡化子類的復雜度。父類並不一定是抽象類(聚合接口,然后模板方法里去組織接口方法,延遲實現),模板方法也並不一定是抽象方法(子類重寫父類)。
鈎子方法:尋找掛載點,比如上面的模板方法,里面的具體方法實現,是暴露給子類,或成員的,子類實現會影響父類的模板算法
簡單鈎子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(); }