簡(jiǎn)單工廠模式:
①抽象基類:類中定義抽象一些方法,用以在子類中實(shí)現(xiàn)
②繼承自抽象基類的子類:實(shí)現(xiàn)基類中的抽象方法
③工廠類:用以實(shí)例化對(duì)象
看完文章再回頭來(lái)看下這張圖,效果會(huì)比較好
采用封裝方式
復(fù)制代碼 代碼如下:
class Calc{
/**
* 計(jì)算結(jié)果
*
* @param int|float $num1
* @param int|float $num2
* @param string $operator
* @return int|float
*/
public function calculate($num1,$num2,$operator){
try {
$result=0;
switch ($operator){
case '+':
$result= $num1+$num2;
break;
case '-':
$result= $num1-$num2;
break;
case '*':
$result= $num1*$num2;
break;
case '/':
if ($num2==0) {
throw new Exception("除數(shù)不能為0");
}
$result= $num1/$num2;
break;
return $result;
}
}catch (Exception $e){
echo "您輸入有誤:".$e->getMessage();
}
}
}
$test=new Calc();
// echo $test->calculate(2,3,'+');//打印:5
echo $test->calculate(5,0,'/');//打印:您輸入有誤:除數(shù)不能為0
?>
復(fù)制代碼 代碼如下:
class Calc{
public function calculate($num1,$num2,$operator){
try {
$result=0;
switch ($operator){
//......省略......
case '%':
$result= $num1%$num2;
break;
//......省略......
}
}catch (Exception $e){
echo "您輸入有誤:".$e->getMessage();
}
}
}
?>
復(fù)制代碼 代碼如下:
/**
* 操作類
* 因?yàn)榘谐橄蠓椒ǎ灶惐仨毬暶鳛槌橄箢?
*/
abstract class Operation{
//抽象方法不能包含函數(shù)體
abstract public function getValue($num1,$num2);//強(qiáng)烈要求子類必須實(shí)現(xiàn)該功能函數(shù)
}
/**
* 加法類
*/
class OperationAdd extends Operation {
public function getValue($num1,$num2){
return $num1+$num2;
}
}
/**
* 減法類
*/
class OperationSub extends Operation {
public function getValue($num1,$num2){
return $num1-$num2;
}
}
/**
* 乘法類
*/
class OperationMul extends Operation {
public function getValue($num1,$num2){
return $num1*$num2;
}
}
/**
* 除法類
*/
class OperationDiv extends Operation {
public function getValue($num1,$num2){
try {
if ($num2==0){
throw new Exception("除數(shù)不能為0");
}else {
return $num1/$num2;
}
}catch (Exception $e){
echo "錯(cuò)誤信息:".$e->getMessage();
}
}
}
?>
復(fù)制代碼 代碼如下:
/**
* 求余類(remainder)
*
*/
class OperationRem extends Operation {
public function getValue($num1,$num2){
return $num1%$num12;
}
}
?>
復(fù)制代碼 代碼如下:
/**
* 工程類,主要用來(lái)創(chuàng)建對(duì)象
* 功能:根據(jù)輸入的運(yùn)算符號(hào),工廠就能實(shí)例化出合適的對(duì)象
*
*/
class Factory{
public static function createObj($operate){
switch ($operate){
case '+':
return new OperationAdd();
break;
case '-':
return new OperationSub();
break;
case '*':
return new OperationSub();
break;
case '/':
return new OperationDiv();
break;
}
}
}
$test=Factory::createObj('/');
$result=$test->getValue(23,0);
echo $result;
?>
PHP怎么學(xué)習(xí)?PHP怎么入門?PHP在哪學(xué)?PHP怎么學(xué)才快?不用擔(dān)心,這里為大家提供了PHP速學(xué)教程(入門到精通),有需要的小伙伴保存下載就能學(xué)習(xí)啦!
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號(hào)
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://www.miracleart.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)