設計模式 模板方法模式

2021-09-11 10:30:52 字數 2253 閱讀 3866

小時候每次考試的時候,都希望考卷都是寫好的,每個人發一張,然後大家寫上自己名字交卷子就可以了23333。

公司又要製造機器了,我們的麻煩也就又來了。

這兩天,來了個新活兒,有個餐廳的一角放幾個自助飲料機。經過調查之後,發現員工們普遍喜歡咖啡,橙汁,茶水。於是公司接了這個活。設計團隊首先定義了乙個所有飲料機的父類,以便統一管理他們。

public abstract class drinkmachine 

public abstract void getdrink();

}

每個具體的飲料需要實現getdrink()方法即可。然後小組長讓每個組員實現乙個具體的硬料機。

public class coffeemachine extends drinkmachine 

@override

public void getdrink()

}

public class juicemachine extends drinkmachine 

@override

public void getdrink()

}

public class teamachine extends drinkmachine 

@override

public void getdrink()

}

三個組員忙了一晚上,終於完成了各自的任務(其實實際任務並不是列印流程這麼簡單的)。第二天他們在一起討論的時候的發現三個人晚上幹的活有50%是重複的,於是他們對組長安排的任務產生了懷疑。在經過學習之後,他們準備通過模板方法模式重構**,然後給組長乙個驚喜。

首先組員a偷偷把組長寫好的父類進行了修改。

public abstract class drinkmachine 

public void getdrink() ;

public void enterwater() ;

public abstract void makedrink();

public void setwatervalue()

}

整個製作飲料的過程被分成了三步,其中的兩步都是固定的,因此在父類就已經實現了。剩下的一步是和飲料的型別有關的,因此要根據子類的不同有不同的實現,所以把makedrink()方法設定為抽象方法,等待子類實現。父類還更改了getdrink()方法,在該方法中呼叫其他三步方法獲得飲料,把該方法作為使用者使用的介面。

其他兩個組員則是對3個子類進行了改造,因為公共的部分已經由父類實現了,現在他們只需要實現每個子類中特有的部分就可以了。

public class coffeemachine extends drinkmachine 

@override

public void makedrink()

}

public class juicemachine extends drinkmachine 

@override

public void makedrink()

}

public class teamachine extends drinkmachine 

@override

public void makedrink()

}

大功告成之後他們發現每個子類中的重複**大大的減少了,而且就算以後要製作新的飲料機,繼承飲料機父類就能得到公共的功能(加入水的操作和開啟、關閉水閥門的操作),然後只需要編寫這個飲料機特定的操作**即可。

他們高興壞了,準備立刻測試一下。

和預期的一樣完美,他們已經迫不及待的給組長進行乙份炫耀了。

模板方法定義了乙個模板。在這個模板中完成了公共**的實現,留出等待子類生成的空缺的部分,子類只需要根據自己的特性補全空缺的部分即可。

模板方法模式大大減少了繼承體系中的重複**,而且減小了整體出錯率(沒辦法,有些人就是抄也能抄錯)。

在實際開發中,如果發現乙個繼承體系的每個子類的整套功能在巨集觀上具有一致性,並且有著部分相同的動作,那麼就可以嘗試使用模板方法模式去重新構建這個繼承結構。可以提高開發的效率,還能增加系統擴充套件性和可維護性。

模板設計模式 設計模式 模板方法模式

在模板模式 template pattern 中,乙個抽象類公開定義了執行它的方法的方式 模板。它的子類可以按需要重寫方法實現,但呼叫將以抽象類中定義的方式進行。這種型別的設計模式屬於行為型模式。首先需要一定抽象的定義,沒有具體的實現,但是在抽象類的行為中,子類去程序這個抽象類,重寫抽象方法,實現不...

設計模式 模板方法設計模式

物件導向,萬物皆物件,用乙個雷來反應現實生活中的東西。比如銀行系統,業務公升級 活期 定期,差別很小,就加判斷 違背單一職責 差別比較多,尤其是模擬較複雜,型別拆分下。拆分之後,自然就有父類,重用。利率 每個客戶端都有利率,但是各不一樣 抽象方法。show 不分客戶端是一樣的,個別客戶端是不一樣的 ...

設計模式 模板方法模式

模板方法模式 類庫中大量使用,例如idbconnection介面 dbconnection抽象類 派生的sqlconnection和派生的oledbconnection就是使用了這種方法 1。介面,到能做的定義進來。一種規範 2.把共同的部分進去分離出來,放到乙個抽象的父類去實現.3.子類中實現 不...