php工厂模式
2016-07-29
最近在学习设计模式,如下例子,就是简单的工厂模式,初次写,就把代码贴出来分享一下。
class Operation{ private $numberA = 0; private $numberB = 0; public function __get($property_name){ if(isset($this->$property_name)) { return $this->$property_name; }else{ return(NULL); } } public function __set($property_name,$value){ $this->$property_name = $value; } public function getResult(){ $result = 0; return $result; } } /** * @todo 加法的操作器 * Class OperationAdd */ class OperationAdd extends Operation { public function getResult(){ $result = 0; $getNumberA = $this->numberA; $getNumberB = $this->numberB; $result = $getNumberB + $getNumberA; return $result; } } /** * @todo 减法的操作器 * Class OperationSub */ class OperationSub extends Operation{ public function getResult(){ $result = 0; $getNumberA = $this->numberA; $getNumberB = $this->numberB; $result = $getNumberA - $getNumberB; return $result; } } /** * @todo 乘法的操作器 * Class OperationMul */ class OperationMul extends Operation{ public function getResult(){ $result = 0; $getNumberA = $this->numberA; $getNumberB = $this->numberB; $result = $getNumberA * $getNumberB; return $result; } } /** * @todo 除法的操作器 * Class OperationDiv */ class OperationDiv extends Operation{ public function getResult(){ $result = 0; $getNumberA = $this->numberA; $getNumberB = $this->numberB; if ('0' == $getNumberB) { throw new Exception('除数不能为0',100003); } $result = $getNumberA/$getNumberB; return $result; } } /** * @todo 简单的工厂模式 * class OperationFactory */ class OperationFactory extends Operation{ public static function createOperation($oper){ switch ($oper) { case '+': $myOper = new OperationAdd(); break; case '-': $myOper = new OperationSub(); break; case '*': $myOper = new OperationMul(); break; case '/': $myOper = new OperationDiv(); break; default: exit('no oper'); break; } return $myOper; } } //调用方法例子 $oper = OperationFactory::createOperation('+'); $oper->numberA = 1; $oper->numberB = 2; $result = $oper->getResult(); echo $result;die;