package com.blankjor.templatemethod; /** * @desc 抽象的人类方法 * @author Blankjor * @date 2017年6月11日 下午10:09:18 */ public abstract class AbstractPerson { /** * 定义一个上班的方法 上班以前会进行一系列的操做 final 方法不容许改变都要上班 */ final void work() { // 起床 rise(); // 穿衣服 dress(); // 吃早饭 breakfast(); // 若是是女生还要化妆 if (isWoman()) { makeUp(); } } /** * 公共的都要作的事情 */ void rise() { System.out.println("起床"); } void dress() { System.out.println("穿衣服"); } void breakfast() { System.out.println("吃早饭"); } // 等着子类去实现 abstract void makeUp(); // 钩子函数 Boolean isWoman() { return true; } } package com.blankjor.templatemethod; /** * @desc * @author Blankjor * @date 2017年6月11日 下午10:17:44 */ public class Man extends AbstractPerson { @Override void makeUp() { // 不用化妆 } @Override Boolean isWoman() { return false; } } package com.blankjor.templatemethod; /** * @desc * @author Blankjor * @date 2017年6月11日 下午10:17:44 */ public class Woman extends AbstractPerson { @Override void makeUp() { System.out.println("化妆"); } @Override Boolean isWoman() { return true; } } package com.blankjor.templatemethod; /** * @desc 模版方法模式的测试方法 * @author Blankjor * @date 2017年6月11日 下午10:19:18 */ public class MainTest { public static void main(String[] args) { Man man = new Man(); Woman woman = new Woman(); System.out.println("男人上班"); man.work(); System.out.println("女人上班"); woman.work(); } }
运行结果:算法