PHP中「簡單工廠模式」例項講解

2021-07-25 02:38:24 字數 2518 閱讀 6794

簡單工廠模式:

①抽象基類:類中定義抽象一些方法,用以在子類中實現

②繼承自抽象基類的子類:實現基類中的抽象方法

③工廠類:用以例項化物件

看完文章再回頭來看下這張圖,效果會比較好

採用封裝方式23

<?php

4class

calc

30$result= $num1/$num2;31

break

;32 }

33return $result;

34 }catch (exception$e)

37}38}

39$test=new

calc();

40//

echo $test->calculate(2,3,'+');//列印:5

41echo

$test->calculate(5,0,'/');//

列印:您輸入有誤:除數不能為0

42 ?>

優點:以上**使用了物件導向的封裝特性,只要有了include這個類,其他頁面就可以隨便使用了

缺點:無法靈活的擴充套件和維護

比如:想要增加乙個「求餘」運算,需要在switch語句塊中新增乙個分支語句,**需要做如下改動

1

新增分支語句23

<?php

4class

calc

15 }catch (exception$e)

18}19}

20 ?>

**分析:用以上方法實現給計算器新增新的功能運算有以下幾個缺點

①需要改動原有的**塊,可能會在為了「新增新功能」而改動原有**的時候,不小心將原有的**改錯了

②如果要新增的功能很多,比如:『乘方』,『開方』,『對數』,『三角函式』,『統計』,或者新增一些程式設計師專用的計算功能,比如:and, or, not, xor,這樣就需要在switch語句中新增n個分支語句。想象下,乙個計算功能的函式如果有二三十個case分支語句,**將超過一屏,不僅令**的可讀性大大降低,關鍵是,為了新增小功能,還得讓其餘不相關都參與解釋,這令程式的執行效率大大降低

解決途徑:採用oop的繼承和多型思想

1

簡單工廠模式的初步實現

2<?php3 /*

*4* 操作類

5* 因為包含有抽象方法,所以類必須宣告為抽象類6*/

7abstract

class

operation

11/**12

* 加法類

13*/

14class operationadd extends

operation 18}

19/**20

* 減法類

21*/

22class operationsub extends

operation 26}

27/**28

* 乘法類

29*/

30class operationmul extends

operation 34}

35/**36

* 除法類

37*/

38class operationdiv extends

operation else

46 }catch (exception$e)

49}50}

51 ?>

這裡採用了物件導向的繼承特性,首先宣告乙個虛擬基類,在基類中指定子類務必實現的方法(getvalue())

分析:通過採用物件導向的繼承特性,我們可以很容易就能對原有程式進行擴充套件,比如:『乘方』,『開方』,『對數』,『三角函式』,『統計』等等。

<?php 

/*** 求餘類(remainder)

**/class operationrem extends

operation

}?>

我們只需要另外寫乙個類(該類繼承虛擬基類),在類中完成相應的功能(比如:求乘方的運算),而且大大的降低了耦合度,方便日後的維護及擴充套件

現在還有乙個問題未解決,就是如何讓程式根據使用者輸入的操作符例項化相應的物件呢?

解決辦法:使用乙個單獨的類來實現例項化的過程,這個類就是工廠

**如下:

1

<?php2 /*

*3* 工程類,主要用來建立物件

4* 功能:根據輸入的運算符號,工廠就能例項化出合適的物件5*

6*/7class

factory23}

24}25$test=factory::createobj('/');

26$result=$test->getvalue(23,0);

27echo

$result

;28 ?>

PHP中「簡單工廠模式」例項講解

簡單工廠模式 抽象基類 類中定義抽象一些方法,用以在子類中實現 繼承自抽象基類的子類 實現基類中的抽象方法 工廠類 用以例項化物件 看完文章再回頭來看下這張圖,效果會比較好 採用封裝方式23 4class calc 30 result num1 num2 31 break 32 33return r...

PHP中「簡單工廠模式」例項講解

簡單工廠模式 抽象基類 類中定義抽象一些方法,用以在子類中實現 繼承自抽象基類的子類 實現基類中的抽象方法 工廠類 用以例項化物件 看完文章再回頭來看下這張圖,效果會比較好 採用封裝方式23 4class calc 30 result num1 num2 31 break 32 33return r...

PHP中「簡單工廠模式」例項講解

簡單工廠模式 抽象基類 類中定義抽象一些方法,用以在子類中實現 繼承自抽象基類的子類 實現基類中的抽象方法 工廠類 用以例項化物件 看完文章再回頭來看下這張圖,效果會比較好 1 採用封裝方式 2 3 4 class calc 30 result num1 num2 31 break 32 33 re...