本文實(shí)例講述了php設(shè)計(jì)模式之模板模式。分享給大家供大家參考,具體如下:
星際中的蟲族部隊(duì)有個(gè)特別的進(jìn)化兵種,就是飛龍,飛龍可以變成空中衛(wèi)士(天蟹)或者吞噬者(對(duì)空的)。另外還有口水兵可以進(jìn)化變成地刺。
這三個(gè)變化過程都是類似的:變化的原部隊(duì)消失,產(chǎn)生一個(gè)蛋或繭,孵化一會(huì)兒,蛋消失,新的部隊(duì)產(chǎn)生。
如果我們把這三個(gè)進(jìn)化獨(dú)立開,就會(huì)產(chǎn)生重復(fù)的代碼,冗余度增大了,所以我們要設(shè)法減少多余的代碼。
待解決的問題:要經(jīng)歷同樣的幾個(gè)步驟,只是每個(gè)步驟的細(xì)節(jié)會(huì)有不同。
思路:做一個(gè)進(jìn)化工程的框架,我們只要控制細(xì)節(jié)就可以了。
模板模式模式示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
<?php //進(jìn)化的框架類,它是個(gè)抽象類 abstract class evolution { //框架方法,由它來實(shí)施各個(gè)步驟,用final禁止子類覆蓋 final public function process( $troop ) { //生成一個(gè)蛋,參數(shù)為進(jìn)化的部隊(duì) $egg = $this ->becomeEgg( $troop ); //等待蛋孵化,參數(shù)為蛋 $this ->waitEgg( $egg ); //孵化后產(chǎn)生新部隊(duì) return $this ->becomeNew( $egg ); } //下面三個(gè)抽象方法,由具體子類來實(shí)現(xiàn) abstract public function becomeEgg( $troop ); abstract public function waitEgg( $egg ); abstract public function becomeNew( $egg ); } //為了簡單說明,這里用空中衛(wèi)士(天蟹)的進(jìn)化類來演示,地刺等的處理方法類似 //天蟹的進(jìn)化類繼承抽象進(jìn)化類 class GuardianEvolution extends evolution { //實(shí)現(xiàn)生成一個(gè)蛋 public function becomeEgg( $troop ) { //銷毀飛龍,返回一個(gè)蛋的對(duì)象的代碼 } //等待蛋孵化 public function waitEgg( $troop ) { //等待幾十秒鐘的代碼 } //孵化后產(chǎn)生新部隊(duì) public function becomeNew(( $troop ) { //銷毀蛋,返回一個(gè)天蟹 } } //新建一個(gè)天蟹進(jìn)化的對(duì)象 $e1 = new GuardianEvolution(); //讓它調(diào)用父類的進(jìn)化框架函數(shù),自動(dòng)完成三個(gè)步驟 $e1 ->process( $sds ); ?> |
用途總結(jié):模板模式可以將一系列的步驟自動(dòng)化,同時(shí)又可以滿足不同的細(xì)節(jié)變化。
實(shí)現(xiàn)總結(jié):需要一個(gè)抽象類來包含框架函數(shù),讓具體的子類繼承它,并實(shí)現(xiàn)所有的步驟。使用的時(shí)候只要調(diào)用框架函數(shù)就自動(dòng)完成了。
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
原文鏈接:https://www.cnblogs.com/davidhhuan/p/4248192.html