<?php
/**
* 簡單工廠模式
* 定義一個工廠類,它可以根據參數的不同返回不同類的實例,被創建的實例通常都具有共同的父類。
*
* 1,定義抽象產品類,封裝各種對象的公有方法。
* 2,定義具體產品類,並實現抽象產品類中的方法。
* 3,定義工廠類,靜態方法,返回不同的具體產品對象。
**/
/**
* 運算類
**/
abstract class Operation
{
abstract public function getValue($num1,$num2);
}
/**
* 加法類
**/
class OperationPlus 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('除數不能爲0!');
} else {
return $num1/$num2;
}
} catch (Exception $e) {
echo $e->getMessage();
}
}
}
/**
* 算法工廠類
**/
class Factory
{
public static function getOperationObj($operate) {
switch ($operate) {
case '+':
return new OperationPlus();
break;
case '-':
return new OperationSub();
break;
case '*':
return new OperationMul();
break;
case '/':
return new OperationDiv();
break;
}
}
}
// 加法
$operation = Factory::getOperationObj('+');
echo $operation->getValue(10,11);
// 減法
$operation = Factory::getOperationObj('-');
echo $operation->getValue(10,11);
// 除法
$operation = Factory::getOperationObj('/');
echo $operation->getValue(10,0);
?>
php 簡單工廠模式
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.