模板模式,官方解释是这样的:
模板模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类提供不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。模板模式的关键在于:父类提供框架性的公共逻辑,子类提供个性化的定制逻辑。
也就是说,父类提供公共方法,子类提供自定义方法。
这里,我想模拟一个场景,就是比如我们去买手机,品牌手机都会送礼物,不同的品牌送的礼物不一样。这样,我们就可以让父类实现固定逻辑,子类实现不同品牌送礼物的逻辑。
父类代码:
publicabstractclassGift { // 买手机总流程protectedvoiddoSend(){ sendBefore(); send(); sendAfter(); } // 赠送前privatevoidsendBefore() { System.out.println("忽悠你买手机......"); } // 赠送礼物protectedabstractvoidsend(); // 赠送后privatevoidsendAfter() { System.out.println("完成购买,礼物已赠送!"); } }
子类代码:
小米子类:
publicclassMiextendsGift{ protectedvoidsend() { System.out.println("送了个小米耳机"); } }
苹果子类:
publicclassAppleextendsGift{ protectedvoidsend() { System.out.println("送了个寂寞"); } }
测试类:
publicclassTest { publicstaticvoidmain(String[] args) { Giftgift=newMi(); gift.doSend(); gift=newApple(); gift.doSend(); } }
结果:
忽悠你买手机...... 送了个小米耳机完成购买,礼物已赠送!忽悠你买手机...... 送了个寂寞完成购买,礼物已赠送!