模板方法模式 深入淺出(二)

2021-07-04 22:56:28 字數 2147 閱讀 5981

模仿方法模式目錄1

、概述

2、結構與分析 3

、拓展

4、模式總結

鉤子方法給子類留了「後門」可以通過在子類中實現的鉤子方法對父類方法的執行進行約束,實現子類對父類行為的反向控制。(體現靈活性)

上篇部落格續集,情侶之間約約會,看看電影,喝喝咖啡,調情調情還是不錯的。說到喝咖啡,這不來到星巴克咖啡店

,我們要了一杯咖啡,當漂亮的服務員問你:「先生,您是否要加調料?」你是呆呆地站在那……還是站在那……還是站在那……

為了使用鉤子,我們在子類中覆蓋它,在這裡,鉤子控制了咖啡飲料是否執行某部分演算法,說得更明確些,就是飲料中是否要加進調料。

先看類圖:

說明:咖啡因飲料為抽象類,其中封裝了一系列步驟方法,第一步:水煮沸(boilwater)、第二步:泡(brew)、第三步:放入杯子(pourincup)、第四步:加調料(addcondiments),模板方法(preparerecipe)中封裝以上的步驟。

在類圖中咱需要注意的是

鉤子方法(

customerwantscondiments),

在下面的**中,鉤子方法的返回值的型別是

boolean

型,預設返回值為

true,

在子類中可以根據實際情況覆蓋該方法,其中用於具體子類

coffee

**決定是否要實現父類的方法。

在具體子類

caffeewithhook

中覆蓋了鉤子方法

customerwantscondiments(),

返回false,

表示客戶無需新增任何調料。如果顧客「想要」調料,返回

ture

時,此時我們才呼叫

addcodiments()

方法。

客戶端**如下:

模板方法應用於下列情況:

1) 一次性實現乙個演算法的不變的部分,並將可變的行為留給子類來實現。

2)基於繼承的**復用技術

3)控制子類擴充套件(鉤子方法)。

金無足赤,人無完人。模板模式固然很好,但也存在一些缺點:

每個不同的實現都需要定義乙個子類,這會導致類的個數增加,系統更加龐大,設計也更加抽象,但是更加符合「單一職責原則」,使得類的內聚性得以提高。(橋接模式相結合使用)

深入淺出模板方法模式

一 引子這是乙個很簡單的模式,卻被非常廣泛的使用。之所以簡單是因為在這個模式中僅僅使用到了繼承關係。繼承關係由於自身的缺陷,被專家們扣上了 罪惡 的帽子。使用委派關係代替繼承關係 盡量使用介面實現而不是抽象類繼承 等等專家警告,讓我們這些菜鳥對繼承 另眼相看 其實,繼承還是有很多自身的優點所在。只是...

深入淺出設計模式 模板模式

設計模式是程式設計師必須掌握的技能,熟練應用各種設計模式,不僅可以提公升我們的編碼能力,也可以使得我們的編碼更美觀。在這裡我們來講解一下模板模式。模板模式 template pattern 中,乙個抽象類公開定義了執行它的方法的方式 模板。它的子類可以按需要重寫方法實現,但呼叫將以抽象類中定義的方式...

深入淺出設計模式(二) 工廠模式

簡單工廠模式 factory pattern 又稱為靜態工廠方法 static factory method 它屬於建立型模式。在簡單工廠模式中,可以根據引數的不同返回不同類的例項。簡單工廠模式專門定義乙個類來負責建立其他類的例項,被建立的例項通常都具有共同的父類。比如有乙個電腦商,目前生產聯想電腦...