设计模式理解:模板方法
模板方法屬于類行為型模式,通常定義出一個穩定的骨架,特定的內容的實現延遲至子類中去實現。
在模板方法的實現思想:將穩定的部分實現,把容易變化的部分開放給實際使用者實現。
模板方法的常見例子:繼承,虛函數等。
例如在JAVA像利用線程實現下載功能,你只需要定義一個線程實現run方法就行。對于Library開發者不需要去實現不同功能的線程,把線程的功能實現留給實際應用的開發者。Library開發者只需要實現線程的系統調度等穩定的操作就可以,這就是“實現穩定,開放變化”。當然對于應用開發者,就要自行去實現“變化的部分”,功能穩定部分的實現邏輯對于應用開發者是一個“黑匣子”。對于JAVA線程使用來說,開發者只需要知道在run方法寫入下載功能就能夠同時達到“并發,共享進程資源”的特點。
例如在一個計算圖形的面積的應用程序中已有矩形和三角形的面積計算功能,現有一個“增加圓形計算面積的功能”的需求。
一種實現方式是“每個圖形都定義一個獨立的類”,第二種是‘定義一個圖形抽象類,讓各個圖形繼承該抽象類。“
---------- 實現方式1------------- class rectangular{....double area(){.....} } class triangle{....double area(){.....} }int main(){if(type == "rectangular"){rectangular r1;...r1.area() ; }else if(type =='triangle'){triangle t1;...t1.area();}return 0 ; }---------- 實現方式2------------- class shape{...double area()=0; } class rectangular:public shape{...double area(){.....} } class triangle:public shape{...double area(){.....} }int main(){rectangular r1;...r1.area() ; return 0 ; }顯然,前一種方式面對這個需求新增,不僅需要創建一個類實體,而且實現流程還需要根據具體類型來變更main方法中的流程。而在第二中方式中,Library 開發人員負責實現 shape 類的定義和main方法的實現,實際應用開發人員只需要創建一個繼承shape 的類就可以完成這個需求。
模板方法主要關注的就是“變化”和“穩定”。把兩者中劃分出來,將變化的部分抽離開,是這模板方法思想的關鍵。
當然,如果功能骨架中的每一步都是變化的,或者從頭到尾都是穩定的,那就不要用模板方法了。
總結
以上是生活随笔為你收集整理的设计模式理解:模板方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ :跳表数据结构的实现原理
- 下一篇: asp.net ajax控件工具集 Au