程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 我的Design Pattern之旅[2]:Template Method Pattern(OO)(1)

我的Design Pattern之旅[2]:Template Method Pattern(OO)(1)

編輯:關於C語言

Abstract

template method pattern是我學到第二個pattern,算是一個很容易理解的pattern,但卻非常的實用。

Intent

對於Operation,只先定義好演算法的輪廓,某些步驟則留給子類別去填補,以便在不改變演算法整體架構的情況下讓子類別去精鏈某些步驟。

其UML表示法

在實務上,我們可能本來有一個功能完整的class,但因為『需求改變』,新的class和原來的class幾乎60%相同, 只有40%不一樣,因此我們希望將60%相同部份的程式留下來,僅改寫40%不同的地方。

如本來某公司只生產『自動泡茶機』,後來為了增加產品線,想生產『自動泡咖啡機』,經過分析,兩台機器的架構相似,生產流程也相似。

自動泡茶機

step1 : 將開水煮開

step2 : 將<茶葉>放入開水

step3 : 將<茶>倒入杯子

step4 : 加上<檸檬>

自動泡咖啡機

step1 : 將開水煮開

step2 : 將<咖啡粉>放入開水

step3 : 將<咖啡>倒入杯子

step4 : 加上<糖>和<奶精>

很明顯的step1相同,但step2 ~ step4不相同,所以只需改寫step2 ~ step4,step1可以繼續使用。先設計一個DrinkMachine雛型,定義了生產過程和step1,因為step2 ~ step4各有差異,就留在繼承DrinkMachine的class去改寫,這就是template method pattern。

我們看看這個架構,日後若有新drink加入,DrinkMachine,TeaMachine,CoffeeMachine皆不用修改,符合OCP的closed for modification原則,若要加入新的class,只計程並改寫DrinkMachine即可,符合OCP的open for extension原則,所以是非常好維護的架構。

簡言之,template method pattern就是將不同的member function用class包起來,由derived class去改寫。

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