1. 程式人生 > >Java設計模式の模版方法模式

Java設計模式の模版方法模式

設計模式 pla 控制 test style 步驟 str 模版 女人

概述 模板方法模式是類的行為模式。準備一個抽象類,將部分邏輯以具體方法以及具體構造函數的形式實現,然後聲明一些抽象方法來迫使子類實現剩余的邏輯。不同的子類可以以不同的方式實現這些抽象方法,從而對剩余的邏輯有不同的實現。這就是模板方法模式的用意。 比如定義一個操作中的算法的骨架,將步驟延遲到子類中。模板方法使得子類能夠不去改變一個算法的結構即可重定義算法的某些特定步驟。 模式中的角色 抽象類(AbstractClass):實現了模板方法,定義了算法的骨架。 具體類(ConcreteClass):實現抽象類中的抽象方法,已完成完整的算法。 具體應用:模擬人上班之前的一些列操作
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(); } }

運行結果:

技術分享

優點 模板方法模式通過把不變的行為搬移到超類,去除了子類中的重復代碼。 子類實現算法的某些細節,有助於算法的擴展。 通過一個父類調用子類實現的操作,通過子類擴展增加新的行為,符合“開放-封閉原則”。 缺點 每個不同的實現都需要定義一個子類,這會導致類的個數的增加,設計更加抽象。 適用場景 在某些類的算法中,用了相同的方法,造成代碼的重復。 控制子類擴展,子類必須遵守算法規則。 參考:http://blog.csdn.net/jason0539/article/details/45037535

Java設計模式の模版方法模式