設計模式學習之模版方法模式

模版方法模式定義:定義一個操做中的算法的框架,而將一些步驟延遲到子類中,使得子類能夠不改變一個算法的結構便可重定義該算法的某些特定步驟算法

模版方法很簡單,平時咱們可能再也不沒意識中就使用到了,模版方法的方法分爲兩類:框架

基本方法:基本方法也叫作基本操做,是由子類實現的方法,而且在模版方法(父類的方法)被調用。ide

模版方法:能夠有一個或者多個,通常是一個具體實現的方法,實現對基本方法的調度,完成固定的邏輯this

模板方法模式的優勢:spa

  1. 封裝不變的部分,擴展可變的部分
  2. 提取公共部分的代碼,便於維護
  3. 行爲由父類控制,子類負責實現基本方法

模版方法模式的使用場景:設計

  1. 多個子類有公有的方法,而且邏輯基本相同時能夠使用
  2. 重要、複雜的算法,能夠把核心算法設計爲模版方法,周邊的相關細節功能則由各個子類實現
  3. 重構時,模版方法模式是一個常用的模式,把相同的代碼抽取到父類中,而後經過子類約束其行爲。
/**
 * @author Lin
 * @Date 2017/11/16.
 * @Description 抽象悍馬模型
 */
public abstract class HummerModel {

    /**
     * 能啓動
     */
    abstract void start();

    /**
     * 能中止
     */
    abstract void stop();

    /**
     * 能打喇叭
     */
    abstract  void alarm();

    /**
     * 引擎能響
     */
    abstract void engineBoom();

    /**
     * 能跑
     */
     public void run(){
         this.start();
         this.engineBoom();
         this.alarm();
         this.stop();
     }
}
/**
 * @author Lin
 * @Date 2017/11/16.
 */
public class HummerH1Model extends HummerModel {

    @Override
    void start() {
        System.out.println("悍馬H1發動........");
    }

    @Override
    void stop() {
        System.out.println("悍馬H1熄火........");
    }

    @Override
    void alarm() {
        System.out.println("悍馬H1打喇叭........");
    }

    @Override
    void engineBoom() {
        System.out.println("悍馬H1引擎聲音,轟轟轟.......");
    }

}

/**
 * @author Lin
 * @Date 2017/11/16.
 */
public class HummerH2Model extends HummerModel {
    
    @Override
    void start() {
        System.out.println("悍馬H2發動........");
    }

    @Override
    void stop() {
        System.out.println("悍馬H2熄火........");
    }

    @Override
    void alarm() {
        System.out.println("悍馬H2打喇叭........");
    }

    @Override
    void engineBoom() {
        System.out.println("悍馬H2引擎聲音,轟轟轟.......");
    }
}
/**
 * @author Lin
 * @Date 2017/11/16.
 */
public class Client {
    public static void main(String[] args) {
        HummerModel h1 = new HummerH1Model();
        h1.run();
        HummerModel h2 = new HummerH2Model();
        h2.run();
    }
}
相關文章
相關標籤/搜索