1.目錄結(jié)構(gòu)
2.工廠模式解析
待補(bǔ)充
3.計(jì)算基類
class BaseOperator
{
private $num_1 = null;
private $num_2 = null;
public function setFirstNum($num)
{
$this->num_1 = $num;
}
public function setSecondNum($num)
{
$this->num_2 = $num;
}
public function getFirstNum()
{
return $this->num_1;
}
public function getSecondNum()
{
return $this->num_2;
}
}
4.計(jì)算接口類
interface InterfaceOperator
{
function doOperate();
}
5.計(jì)算類
include_once './BaseOperator.php';
include_once './InterfaceOperator.php';
class ActionAdd extends BaseOperator implements InterfaceOperator
{
// 加法
public function doOperate()
{
$result = null;
$num_1 = parent::getFirstNum();
$num_2 = parent::getSecondNum();
$result = $num_1 + $num_2;
return $result;
}
}
class ActionSub extends BaseOperator implements InterfaceOperator
{
// 減法
public function doOperate()
{
$result = null;
$num_1 = parent::getFirstNum();
$num_2 = parent::getSecondNum();
$result = $num_1 - $num_2;
return $result;
}
}
class ActionDiv extends BaseOperator implements InterfaceOperator
{
// 除法
public function doOperate()
{
$result = null;
$num_1 = parent::getFirstNum();
$num_2 = parent::getSecondNum();
if ($num_2 == 0) {
throw new \Exception('Number invalid', '2202');
}
$result = $num_1 / $num_2;
return $result;
}
}
class ActionMul extends BaseOperator implements InterfaceOperator
{
// 乘法
public function doOperate()
{
$result = null;
$num_1 = parent::getFirstNum();
$num_2 = parent::getSecondNum();
$result = $num_1 * $num_2;
return $result;
}
}
6.計(jì)算工廠類
include_once './FunctionOperator.php';
class FactoryOperator
{
/**
* @param $operation
* @return ActionAdd|ActionDiv|ActionMul|ActionSub
* @throws Exception
*/
public static function factory($operation)
{
switch($operation)
{
case "+":
$operator = new ActionAdd();
break;
case "-":
$operator = new ActionSub();
break;
case "*":
$operator = new ActionMul();
break;
case "/":
$operator = new ActionDiv();
break;
default:
throw new \Exception('Operation invalid', '2202');
break;
}
return $operator;
}
}
6.模擬
include_once './FactoryOperator.php';
try {
$operator = FactoryOperator::factory('*');
$operator->setFirstNum(4);
$operator->setSecondNum(2);
$result = $operator->doOperate();
echo "Result is $result";
} catch (\Exception $e) {
echo $e->getTraceAsString();
}
7.感想
通過(guò)分層達(dá)到了解耦的目的鹿霸。感覺(jué)越高級(jí)的東西就有越多的分層路克,在分層的道路上越走越遠(yuǎn)擂红。
工廠類的左右是實(shí)例化一個(gè)對(duì)象脚翘,也僅僅是實(shí)例化一個(gè)對(duì)象再层。其他屬性不要在工廠類里面進(jìn)行設(shè)置跷坝,而是在實(shí)例化之后進(jìn)行設(shè)置(setFirstNum...)倦蚪。