模板方法模式 不該相遇在秋天

2022-09-23 20:12:05 字數 910 閱讀 5296

大家好,我是小趙,目前在藏劍山莊任職鑄劍師領班,沒錯,我是領班。

今天給大家演示一手模板方法模式,說實話,這個設計模式我們幾乎每個人都在用,只是有些人不知道這種做法有個名稱,叫做模板方法模式。

用我的小弟們來做例子吧。

小明幹活:

public class xiaoming

}小紅幹活:

public class xiaohong

}例子中雖然是簡短的一行行列印,在我們實際工作專案中,可能就是乙個個方法,或者是一堆堆**塊。

這裡咱們正常優化的時候,肯定會把相同的**擰出來,做成乙個函式大家調,就不用你寫乙份、我寫乙份了。其實這就是模板方法模式的核心思想了,就是提取公共**,把不變的行為搬移到父類,去除子類中重複**。

我的小弟們幹活的流程,其實就相當於乙個模板,每個人都要做這些事,所以相同的事情就抽取出來寫在模板裡,而他們每個人就繼承這個模板。

模板類:

abstract class maketemplate

protected final void forge()

abstract void doit();

}  之所以有final加持,是因為我不想讓子類重寫方法,這個final並不是模板方法模式的規則,實戰中我們都會根據自身的業務情況來決定,必須把模板方法也寫成abstract,由子類去實現也有的。

小明幹活:

public class xiaoming extends maketemplate

}小紅幹活:

public class xiaohong extends maketemplate

}在重構**的時候,可以多考慮模板方法模式,凡是多個子類有共有方法、公有演算法、都可以提取出來做成模板,讓子類去呼叫。如果在繼承上面沒有資源,也可以做成乙個公共工具類讓大家去呼叫,一般來說,這是經常使用的玩法。

模板方法模式

有這樣乙個場景 乙個演算法或流程,它的步驟以及步驟之間的順序是固定的,但具體的某一步可能有不同的實現。對於這麼乙個場景,可以建立多個類,各個類實現不同的實現,但是這樣的缺點是 易錯 難改,易錯 應為步驟和順序是固定的,而且在每個類中都要寫一遍,程式設計師怎有心情不好的時候,就有可能把其中某一步給寫錯...

模板方法模式

模板方法模式 定義乙個演算法框架,將裡面的操作步驟推遲到子類中去執行,這樣使得子類不用改變框架,只需改變某些操作步驟方法 ifndef test h define test h include include using namespace std class test virtual test v...

模板方法模式

模板方法模式 在乙個方法中定義乙個演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以在不改變演算法結構的情況下,重新定義演算法的某些步驟。還可以使用鉤子對可選部分進行判斷。include include using namespace std class caffeinebeverage ...