程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> java設計模式之模板方法模式,java設計模式模板

java設計模式之模板方法模式,java設計模式模板

編輯:JAVA綜合教程

java設計模式之模板方法模式,java設計模式模板


模板方法模式

  定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。 模板方法使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。通俗的說的就是有很多相同的步驟的,在某一些地方可能有一些差別適合於這種模式,如大話設計模式中說到的考試場景中,每個人的試卷都是一樣的,只有答案不一樣。這種場景就適合於模板方法模式。我這次自己寫的是一個汽車啟動的過程,每一種汽車啟動的過程都基本是一樣的流程,無非是這一過程中存在一些細小差別。

模板方法模式UML圖

  

模板方法模式代碼

package com.roc.template;
/**
 * 汽車模型
 * 模型模式
 * @author liaowp
 *
 */
public abstract class CarModel {
     /**
      * 汽車啟動
      */
     protected abstract void start();
    
     /**
      * 停車
      */
     protected abstract void stop();
     
     /**
      * 用戶並不需要關注你的車怎麼啟動或者停下來的,可以開可以停就可以啦
      */
     final public void excet(){
         this.start();
         this.stop();
     }
}
package com.roc.template;
/**
 * 大眾車
 * @author liaowp
 *
 */
public class Wcar extends CarModel{

    @Override
    protected void start() {
        System.out.println("大眾車啟動 。。。。。。。。突突突");
    }

    @Override
    protected void stop() {
        System.out.println("大眾車停車。。。。。。。。。");
    }
}
package com.roc.template;

public class Ocar extends CarModel{

    @Override
    protected void start() {
        System.out.println("奧迪  無匙啟動               突突突");
    }

    @Override
    protected void stop() {
        System.out.println("奧迪  停車              ");
    }

}
package com.roc.template;
/**
 * 客戶端
 * @author liaowp
 *
 */
public class Client {
    public static void main(String[] args) {
        CarModel wcar=new Wcar();//家裡的第一輛車,作為用戶的我們並不需要關注車怎麼啟動的.子類變量變為父類。多態
        wcar.excet();
        
        //突然家裡需要第二輛車了   奧迪     我們也不需要關注他怎麼生產啟動的    
        CarModel ocar=new Ocar();
        ocar.excet();
    }
}

模板方法模式適用場景

  • 一次性實現一個算法的不變的部分,並將可變的行為留給子類來實現。
  • 各子類中公共的行為應被提取出來並集中到一個公共父類中以避免代碼重復。這是Opdyke和Johnson所描述過的“重分解以一般化”的一個很好的例子。首先識別現有代碼中的不同之處,並且將不同之處分離為新的操作。最後,用一個調用這些新的操作的模板方法來替換這些不同的代碼。
  • 控制子類擴展。模板方法只在特定點調用“hook”操作,這樣就只允許在這些點進行擴展。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved