文章**:
簡單工廠模式:
①抽象基類:類中定義抽象一些方法,用以在子類中實現
②繼承自抽象基類的子類:實現基類中的抽象方法
③工廠類:用以例項化物件
看完文章再回頭來看下這張圖,效果會比較好
採用封裝方式
<?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 乙個方法,而沒有使用工廠模式,則要修改呼叫形狀的 塊。定義形...