1、前言設計模式
前面咱們講過了迭代器模式和適配器模式,對於這兩個‘器’,咱們要有深入的理解,理解何以稱得上‘器’,工具也,拿來讓咱們使用的,人類和動物的最大區別是使用工具,雖然我對這個不是很贊成,可是工具的重要性是毫無爭議的,善假於物才能走到更高的地方去。如今開始,咱們好好地看一看設計模式,其實無外乎接口、抽象類、具體類,經過鏈接(聚合、組合、繼承和派生)從而實現多態來達到高內聚、低耦合的設計原則,這些原理中,咱們能夠看到一些基本原則了,好比將實現交給子類,儘可能不要動之前已經封裝好的模塊,超類對子類的使用權限(裏式代換法則),代碼要具備可擴展性等等,經過這些看似複雜而在大型工程中必不可少的東西,咱們建造了一個個高樓大廈。而模板方法就是將實現具體的實現交給子類,而父類只是作一些全局的任務安排,子類和父類須要緊密的配合才能實現一個任務的功能,由於工做的緊密結合,咱們在寫代碼的時候必定要作好註釋,這樣才能使得程序具備強健的可讀性。架構
2、模板方法模式工具
模板,就是設定一種結構或者架構,而後後續的全部工做都是在這個架子上填充相應的內容。好比老師要統計同窗們的興趣愛好,實現會給同窗們一張紙,規定了姓名、學號、年齡、性別、興趣愛好等模式,而後同窗們按照給定的內容進行填充,不一樣的人會有不一樣的填寫結果,最後老師收回同窗們的結果,若是發現還想統計其餘的信息,只用在模式上加入新的一個屬性,這樣就能夠了,若是不這樣作,咱們能夠看到有的同窗只寫了姓名,有的只寫了興趣愛好等等,這樣在之後的維護之中就很是的麻煩,由於信息很是的混亂,因而可知模板的重要性。其實生活中到處能夠看到,好比一個公司的收據,發票的格式,一卡通的格式,銀行帳號的格式,廁所的設計,各類文件的格式,郵件的格式等等,這種模式、模型、格式、規定、設計原則落到具體化的時候就變成了模板,咱們當且僅當按照模板的方式進行填充了,咱們的信息纔會被承認和理解。一樣的咱們思考在面向對象設計(OOD)中,咱們的模板應該是在子類仍是父類呢,根據繼承的特性,咱們知道子類具備父類的全部特徵,而且能夠有父類沒有的方法,而反之不能,所以,父類就是最好的模板材料,那麼咱們在父類上面設計一些屬性或者模式,讓子類去實現和完成,而且在父類上面給出一種統一的處理某類事物的方法,這種方法中將屬性或者模式有機的組合和拼接起來,就成爲模板方法。好比咱們在模板中定義了A,B,C三種方法,這三種方法就是規定,而後咱們在父類上在定義一個方法Model,Model使用了A,B,C方法來實現現實生活中的某一件事情,任何對於A,B,C的實現都須要通過Model進行處理纔可以完成相應的事務,所以,咱們成這個Model方法爲模板。以後咱們的任務須要必定的改變,只須要在Model上面進行操做就能同步到子類上面了,加入子類有100個,這是很是方便的。this
3、代碼spa
package zyr.dp.template; public abstract class AbstractDisplay { public abstract void open(); public abstract void print(); public abstract void close(); public final void display(){ open(); print(); close(); } }
package zyr.dp.template; public class CharDisplay extends AbstractDisplay { String word; CharDisplay(String word){ this.word=word; } public void open() { System.out.print("<<"); } public void print() { System.out.print(word); } public void close() { System.out.println(">>"); } }
package zyr.dp.template; public class StringDisplay extends AbstractDisplay { String word; int width; StringDisplay(String word){ this.word=word; width=word.getBytes().length; } public void open() { printString(); } public void print() { for(int i=0;i<5;i++){ System.out.print("|"); System.out.print(word); System.out.println("|"); } } public void close() { printString(); } private void printString(){ System.out.print("#"); for(int i=0;i<width;i++){ System.out.print("*"); } System.out.println("#"); } }
package zyr.dp.template; public class Main { public static void main(String[] args) { AbstractDisplay p=new CharDisplay("zyr"); p.display(); System.out.println("----------------"); p=new StringDisplay("zyr"); p.display(); } }
4、總結.net
模板模式很是好理解,使用起來也很簡單,可是在工程中咱們每每將模板與其它模塊結合起來使用,所以咱們要認清模板模式的本質,將具備相同操做的多種事物抽象出相同的操做,而後將這些操做有機的整合起來變成模板類,另外也要注意在模板方法的定義final表示此方法不能被繼承和重寫,這無疑是重要的,規定和法則不能被其餘人鎖改變。在後面的工廠方法中,咱們能夠看到模板的應用,以及迭代器的影子。設計
淺談設計模式<最通俗易懂的講解>code