使用簡單工廠實現計算器
- <?php
- namespace SimpleFactory\OperationClass;
- /**
- * 運算抽象類
- * @author struggle
- * @verison 2012-5-28
- */
- abstract class Operation{
- /**
- * 計算結果
- * @param int/float $param1 參數1
- * @param int/float $param2 參數2
- */
- public abstract function getResult($param1,$param2);
- }
- /**
- * 加法類
- * @author struggle
- * @verison 2012-5-24
- */
- class OperationAdd extends Operation {
- public function getResult($param1,$param2){
- return $param1 + $param2;
- }
- }
- /**
- * 減法類
- * @author struggle
- * @verison 2012-5-24
- */
- class OperationSub extends Operation {
- public function getResult($param1,$param2){
- return $param1 - $param2;
- }
- }
- /**
- * 乘法類
- * @author struggle
- * @verison 2012-5-24
- */
- class OperationMul extends Operation {
- /**
- * 返回乘法結果
- */
- public function getResult($param1,$param2){
- return $param1 * $param2;
- }
- }
- /**
- * 除法類
- * @author struggle
- * @verison 2012-5-24
- */
- class OperationDiv extends Operation {
- /**
- * 返回乘法結果
- */
- public function getResult($param1,$param2){
- if($param2 == 0){
- throw new \Exception('被除數不能爲 0');
- }
- return $param1 /$param2;
- }
- }
工廠類:
- <?php
- namespace SimpleFactory;
- use SimpleFactory\OperationClass;
- /**
- * 工廠類
- * @author struggle
- * @verison 2012-5-24
- */
- class OperationFactory {
- /**
- * 創建操作類
- * @param string $string
- */
- public static function createOpertaion($string){
- $operation = '';
- switch ($string) {
- case '+':
- $operation = new OperationClass\OperationAdd();
- break;
- case '-':
- $operation = new OperationClass\OperationSub();
- break;
- case '*':
- $operation = new OperationClass\OperationMul();
- break;
- case '/':
- $operation = new OperationClass\OperationDiv();
- break;
- default:
- throw new \Exception("沒有此運算符");
- break;
- }
- return $operation;
- }
- }
客戶端調用程序:
- <?php
- /**
- * 工廠設計模式
- */
- use SimpleFactory\OperationFactory;
- define('ROOT_PATH',dirname(dirname(__FILE__)).'/');
- /**
- * 自動加載類文件
- * @param $class
- */
- function __autoload($class){
- if(strpos($class,'OperationClass')){
- $class_path = substr($class,0,strrpos($class,'\\'));
- }else{
- $class_path = str_replace('\\','/',$class);
- }
- include_once ROOT_PATH.$class_path.'.class.php';
- }
- //調用工廠方法生成運算對象
- $oper = OperationFactory::createOpertaion('/');
- $result = $oper->getResult(1,10);
- var_dump($result);
UML類圖:
使用VISO做的類圖有些差