php設計模式 模板模式

2021-09-08 12:47:15 字數 2070 閱讀 4145

最近打算鞏固,整理一下設計模式相關的內容。這篇是關於  ——模板模式!

原文:

這篇文章主要介紹了php設計模式中的模板方法模式。使用php來實現模板方法模式(template method).

一、意圖:

定義乙個操作中的演算法的骨架,而將一些步驟延遲到子類中。template method 使得子類可以在不改變乙個演算法的結構的情況下重定義該演算法的某些特定的步驟

二、模板方法模式的結構圖:

三、模板方法模式中主要角色:

抽象模板(abstractclass)角色:定義乙個或多個抽象方法讓子類實現。這些抽象方法叫做基本操作,它們是頂級邏輯的組成部分。

定義乙個模板方法。這個模板方法一般是乙個具體方法,它給出頂級邏輯的骨架,而邏輯的組成步驟在對應的抽象操作中,這些操作將會推遲到子類中實現。同時,頂層邏輯也可以呼叫具體的實現方法

具體模板(concrteclass)角色:實現父類的乙個或多個抽象方法,作為頂層邏輯的組成而存在。

每個抽象模板可以有多個具體模板與之對應,而每個具體模板有其自己對抽象方法(也就是頂層邏輯的組成部分)的實現,從而使得頂層邏輯的實現各不相同。

四、模板方法模式適用場景:

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

2、各子類中公共的行為應被提取出來並集中到乙個公共父類中以避免**重複。

3、控制子類擴充套件。

五、模板方法模式與其它模式:

1、策略模式(strategy模式):模板方法使用繼承來改變演算法的部分,策略模式使用委託來改變整個演算法。區別在於封閉的變化不同,乙個變化的部分,乙個變化的是整體。

2、工廠方法模式(factory method模式):factory method模式常被模板方法呼叫。

六、模板方法模式的php示例:

<?php 

/** * 抽象模板角色

* 定義抽象方法作為頂層邏輯的組成部分,由子類實現

* 定義模板方法作為頂層邏輯的架子,呼叫基本方法組裝頂層邏輯

*/abstract class abstractclass

/*** 基本方法1

*/abstract protected function primitiveoperation1();

/*** 基本方法2

*/abstract protected function primitiveoperation2();}

/** * 具體模板角色

* 實現父類的抽象方法

*/class concreteclass extends abstractclass

/*** 基本方法2

*/protected function primitiveoperation2() }

/*** 客戶端

*/class client }

client::main();

?>

七、模板方法模式:

模板方法是一種**復用的基本技術,模板方法導致一種反射的控制結構,這指的是乙個父類呼叫子類的操作。

其實現過程:準備乙個抽象類,將部分邏輯以具體方法以及具體構造子的形式實現,然後宣告一些抽象方法來迫使子類實現剩餘的邏輯。不同子類可以以不同的方式實現這些抽象方法,從而對  剩餘的邏輯有不同的實現。

八、重構的原則:

重構時應當遵守的原則是:將行為以是移到結構的高階,而將狀態盡量移動到結構的低端。

1、應當要所行為而不是狀態定義乙個類。

2、在實現行為是,是用抽象狀態而不是用具體狀態。

3、給操作劃分層次。

4、將狀態的確認推遲到子類中。在父類中,如果需要狀態屬性的話,可以呼叫抽象的取值方法,而將抽象的取值方法的實現放到具體子類中。

如果可以遵守以上的而,那麼就可以在等級結構中將介面與實現分離,將抽象與具體分離,從而保證**可以最大限度的被復用。

以上就是使用php實現模板方法模式的**,還有一些關於模板方法模式的概念區分,希望對大家的學習有所幫助。

php設計模式 模板模式

最近打算鞏固,整理一下設計模式相關的內容。這篇是關於 模板模式!原文 這篇文章主要介紹了php設計模式中的模板方法模式。使用php來實現模板方法模式 template method 一 意圖 定義乙個操作中的演算法的骨架,而將一些步驟延遲到子類中。template method 使得子類可以在不改變...

模板設計模式 PHP設計模式之模板方法模式

模板方法模式,也是我們經常會在不經意間有會用到的模式之一。這個模式是對繼承的最好詮釋。當子類中有重複的動作時,將他們提取出來,放在父類中進行統一的處理,這就是模板方法模式的最簡單通俗的解釋。就像我們平時做專案,每次的專案流程實都差不多,都有調研 開發 測試 部署上線等流程。而具體到每個專案中,這些流...

php設計模式 Template 模板模式

繼承關係由於自身的缺陷,被專家們扣上了 罪惡 的帽子。使用委派關係代替繼承關係 盡量使用介面實現而不是抽象類繼承 等等專家警告,讓我們這些菜鳥對繼承 另眼相看 其實,繼承還是有很多自身的優點所在。只是被大家濫用的似乎缺點更加明顯了。合理的利用繼承關係,還是能對你的系統設計起到很好的作用的。而模板方法...