設計模式(三)__模板方法設計模式

來源:互聯網
上載者:User

標籤:

咳咳,上課。  

起立。

老師再見。???

你們就這麼希望老師走嗎。。。。

好了,同學們,今天這節課給大家介紹一下設計模式的一種——模板方法設計模式。

  那麼什麼是模板方法設計模式呢?

  當功能內部一部分實現是確定的,一部分實現是不確定的。這時可以把不確定的部分暴露出去,讓子類去實現。

  模板方法模式是基於繼承的代碼複用的基本技術,模板方法模式的結構和用法也是物件導向設計的核心。

  模式中的角色:

  ①抽象類別:實現了模板方法

  ②具體類:實現抽象類別中的抽象方法

  通過一個例子來讓大家更容易理解。

  當我們需要判斷一段程式啟動並執行時間的時候,程式如下:

 1 class GetTime { 2     public void getTime() { 3         long start = System.currentTimeMillis(); 4         // 判斷這個迴圈執行的時間 5         for (int y = 0; y < 1000; y++) { 6             System.out.println(y); 7         } 8         long end = System.currentTimeMillis(); 9         System.out.println("毫秒是:" + (end - start));10     }11 }

  可是,如果需要判斷的那段程式不確定怎麼辦呢?

  這時可以把那段程式抽取成一個方法,需要判斷哪個程式,只需要修改這個方法即可。這種方式不好,當需求變更時,就需要修改這個類中的方法,違背了開閉原則,增加了開發成本,並且很容易出錯。

  那麼我們可以把這個不確定的功能部分提取出來,通過抽象方法實現,當你需要判斷哪段程式的時候,可以通過子類去複寫實現。這樣做把不變的功能移到超類,通過子類擴充新的功能,有助於擴充,修改,符合開閉原則。

代碼如下:

 1 abstract class GetTime { 2     public final void getTime() { // 此功能如果不需要複寫,可加final限定 3         long start = System.currentTimeMillis(); 4         code(); // 不確定的功能部分,提取出來,通過抽象方法實現 5         long end = System.currentTimeMillis(); 6         System.out.println("毫秒是:" + (end - start)); 7     } 8  9     public abstract void code(); // 抽象不確定的功能,讓子類複寫實現10 }11 12 class Demo extends GetTime {13     public void code() { // 子類複寫功能方法14         for (int y = 0; y < 1000; y++) {15             System.out.println("y");16         }17     }18 }

這樣做也是有缺點的,每個不同的實現都需要定義一個子類,這會導致類的個數的增加。

希望大家下去可以自行練習,把各種模式變成自己的習慣。

咳咳,下課

起立

老師再見

 

設計模式(三)__模板方法設計模式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.