PHP 工廠模式

2021-07-13 09:56:45 字數 2221 閱讀 3413

文章**:

簡單工廠模式:

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

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

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

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

採用封裝方式

<?php

class calc

$result= $num1/$num2;

break;

}return $result;

}catch (exception $e)}}

$test=new calc();

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

echo $test->calculate(5,0,'/');//列印:您輸入有誤:除數不能為0

?>

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

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

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

新增分支語句

<?php

class calc

}catch (exception $e)}}

?>

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

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

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

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

簡單工廠模式的初步實現

<?php

/*** 操作類

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

*/abstract class operation

/*** 加法類

*/class operationadd extends operation

}/**

* 減法類

*/class operationsub extends operation

}/**

* 乘法類

*/class operationmul extends operation

}/**

* 除法類

*/class operationdiv extends operation else

}catch (exception $e)}}

?>

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

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

<?php 

/*** 求餘類(remainder)**/

class operationrem extends operation

}?>

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

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

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

**如下:

<?php 

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

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

class factory}}

$test=factory::createobj('/');

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

echo $result;

?>

php 工廠模式

在開發大型系統過程中,往往會出現這樣一種情況 我有一部分基礎資料,是類classa是從資料庫a讀取出來的,其他很多的功能都是基於這個基礎資料來操作的。現在呢,我想把資料從資料庫a變成從另外的資料來源去獲取,這時候,要修改起來就比較麻煩,要修改其他很多類的 這種設計顯然是不夠靈活的,換句話說,就是緊耦...

PHP 工廠模式

一 什麼是工廠模式?乙個類通過本身的靜態方法來,例項化乙個類並返回乙個例項物件 二 工廠模式特點?類命名特點 namefactory eg class mysqlfactory 這是為了規範,當然也去起其他任意名字 靜態方法名稱 static public function factory clas...

PHP設計模式 工廠模式

使用工廠模式使得在呼叫方法時變得更容易,因為它只有乙個類和乙個方法,若沒有使用工廠模式,則要在呼叫時決定應該呼叫哪個類和哪個方法 使用工廠模式還使得未來對應用程式做改變時更加容易 比如要增加一種形狀的支援,只需要修改工廠類中的create 乙個方法,而沒有使用工廠模式,則要修改呼叫形狀的 塊。定義形...