Android設計模式2之Template Method

Android設計模式2  Template Method

GOF-23 模式分類

目的算法

  • 建立型(Creational)模式
    將對象的部分建立工做延遲到子類或者其餘對象,從而應對需求變化爲對象建立時具體類型實現引來的衝擊。
  • 結構型(Structural)模式
    經過類繼承或者對象組合得到更靈活的結構,從而應對需求變化爲對象的結構所帶來的衝擊。
  • 行爲型(Behavioral)模式
    經過類繼承或者對象組合來劃分類與對象間的職責,從而應對需求變化爲多個交互的對象所帶來的衝擊。
    範圍
  • 類模式處理類與子類的靜態關係。
  • 對象模式處理對象間的動態關係。

 

從封裝變化角度對模式分類

組件協做   對象性能   數據結構  
  Template Method   Singleton   Composite
  Strategy   Flyweight   Lterator
  Observer/Event       Chain of Resposibility
單一職責   行爲變化   狀態變化  
  Decorator   Command   State
  Bridge   Visitor   Memento
接口隔離   對象建立   領域問題  
  Facade   Factory Method   Interpreter
  Proxy   Abstract Factory    
  Adapter   Prototype    
  Mediator   Builder    

 

重構得到模式 Refactoring to Patterns

  • 面向對象設計模式是好的面向對象設計,所謂好的面向對象設計指的是那些能夠知足應對變化,提升複用的設計。
  • 現代軟件設計的特徵是需求的頻繁變化,設計模式的要點是尋求變化點,而後在變化點處應用設計模式,從而來更好地應對需求的變化.何時,什麼地點應用設計模式理解設計模式結構自己更爲重要。
  • 設計模式的應用不宜先入爲主,沒有一步到位的設計模式,敏捷軟件開發實踐提倡的Refactoring to Patterns是目前公認的最好的使用設計模式的方法。

 

重構關鍵技法

  • 靜態->動態
  • 早綁定->晚綁定
  • 繼承->組合
  • 編譯時依賴->運行時依賴
  • 緊耦合->鬆耦合

 

「組件協做」模式

  • 現代軟件專業分工以後的第一個結果是:「框架與應用程序的劃分」,「組件協做」模式經過晚期綁定,來實現框架與應用程序之間的鬆耦合,是兩者之間協做時經常使用的模式。
  • 典型模式
    Template Method
    Strategy
    Observer/Event

本節設計目標 Template Method

Tremplate Method模板方法
動機:在軟件的構建過程當中,對於某一項任務,他經常有穩定的總體操做結構,但各個子步驟卻有不少改變的需求,或者因爲固有的緣由(好比框架與應用之間的關係)而沒法和任務的總體結構同事實現。
設計要求設計模式

  • 程序庫開發人員要設計一個Library,他要實現其中的3個步驟:step1,step3,step5(穩定)(被複用)
  • 應用程序開發人員須要作另外的2個步驟:step2,step4(變化),而且要把這5個步驟按照某種流程(穩定)、算法打包在一塊兒。

方案一

結構化設計思惟

早綁定 Library<—-Application

步驟數據結構

  • 程序庫開發人員開發step1,step3,step5
  • 應用程序開發人員開發step2,step4以及程序主流程

源碼:app

  1. //程序庫開發人員
  2. classLibrary{
  3. //穩定
  4. publicvoid step1(){//...
  5. }
  6. //穩定
  7. publicvoid step3(){//...
  8. }
  9. //穩定
  10. publicvoid step5(){//...
  11. }
  12. }
  1. //應用程序開發人員
  2. classApplication{
  3. //變化
  4. publicboolean step2(){//...
  5. returntrue;
  6. }
  7. //變化
  8. publicvoid step4(){//...
  9. }
  10. //穩定
  11. publicstaticvoid main(String args[]){
  12. Library lib =newLibrary();
  13. Application app =newApplication();
  14. lib.step1();
  15. if(app.step2()){
  16. lib.step3();
  17. }
  18. for(int i =0; i <4; i++){
  19. app.step4();
  20. }
  21. lib.step5();
  22. }
  23. }

方案二

面向對象設計思惟  ————複用性獲得提高

晚綁定 Library—->Application

步驟框架

  • 程序庫開發人員開發step1,step3,step5以及程序主流程
  • 應用程序開發人員開發step2,step4

源碼:ide

  1. //程序庫開發人員
  2. abstractclassLibrary{
  3. publicvoid run(){//穩定 template method
  4. step1();
  5. if(step2()){//支持變化 ==> 虛函數的多態調用
  6. step3();
  7. }
  8. for(int i =0; i <4; i++){
  9. step4();//支持變化 ==> 虛函數的多態調用
  10. }
  11. step5();
  12. }
  13. protectedvoid step1(){//穩定 //...
  14. }
  15. protectedvoid step3(){//穩定 //...
  16. }
  17. protectedvoid step5(){//穩定 //...
  18. }
  19. abstractboolean step2();//變化
  20. abstractvoid step4();//變化
  21. }
  1. //應用程序開發人員
  2. classApplicationextendsLibrary{
  3. @Override
  4. protectedboolean step2(){//... 子類重寫實現
  5. returntrue;
  6. }
  7. @Override
  8. protectedvoid step4(){//... 子類重寫實現
  9. }
  10. publicstaticvoid main(String args[]){
  11. Library lib =newApplication();
  12. lib.Run();
  13. }
  14. }

總結

  • Template Method模式是一種很是基礎性的設計模式,在面向對象系統中有着大量的應用,它用最簡潔的機制(虛函數的多態性)爲不少應用程序框架提供了靈活的擴展點,是代碼複用方面的基本實現結構。
  • 除了能夠靈活應對子步驟的變化外,不要強調自我,讓我來調用你的反向控制結構是Template Method的典型應用。
  • 在具體的實現方面,被Template Method調用的虛方法能夠具備實現,也能夠沒有任何實現(抽象方法、純虛方法),但通常推薦設置爲Protected方法。



相關文章
相關標籤/搜索