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(); } }
運行結果:算法