簡單工廠模式

 使用簡單工廠實現計算器

  1. <?php 
  2. namespace SimpleFactory\OperationClass; 
  3. /** 
  4.  * 運算抽象類 
  5.  * @author struggle 
  6.  * @verison 2012-5-28 
  7.  */ 
  8. abstract  class Operation{ 
  9.     /** 
  10.      * 計算結果 
  11.      * @param int/float $param1 參數1 
  12.      * @param int/float $param2 參數2 
  13.      */ 
  14.     public abstract  function getResult($param1,$param2); 
  15. /** 
  16.  * 加法類  
  17.  * @author struggle 
  18.  * @verison 2012-5-24 
  19.  */ 
  20. class OperationAdd extends Operation { 
  21.      
  22.     public function getResult($param1,$param2){ 
  23.         return $param1 + $param2
  24.     } 
  25. /** 
  26.  * 減法類 
  27.  * @author struggle 
  28.  * @verison 2012-5-24 
  29.  */ 
  30. class OperationSub extends Operation { 
  31.      
  32.     public function getResult($param1,$param2){ 
  33.         return $param1 - $param2
  34.     } 
  35. /** 
  36.  * 乘法類 
  37.  * @author struggle 
  38.  * @verison 2012-5-24 
  39.  */ 
  40. class OperationMul extends Operation { 
  41.     /** 
  42.      * 返回乘法結果 
  43.      */ 
  44.     public function getResult($param1,$param2){ 
  45.         return $param1 * $param2
  46.     } 
  47. /** 
  48.  * 除法類 
  49.  * @author struggle 
  50.  * @verison 2012-5-24 
  51.  */ 
  52. class OperationDiv extends Operation { 
  53.     /** 
  54.      * 返回乘法結果 
  55.      */ 
  56.     public function getResult($param1,$param2){ 
  57.         if($param2 == 0){ 
  58.             throw new \Exception('被除數不能爲 0'); 
  59.         } 
  60.         return $param1 /$param2
  61.     } 

工廠類:

  1. <?php 
  2. namespace  SimpleFactory; 
  3. use SimpleFactory\OperationClass; 
  4. /** 
  5.  * 工廠類 
  6.  * @author struggle 
  7.  * @verison 2012-5-24 
  8.  */ 
  9. class OperationFactory { 
  10.     /** 
  11.      * 創建操作類 
  12.      * @param string $string 
  13.      */ 
  14.     public static  function createOpertaion($string){ 
  15.          $operation = ''
  16.         switch ($string) { 
  17.             case '+'
  18.                $operation = new OperationClass\OperationAdd(); 
  19.                break
  20.             case '-'
  21.                 $operation = new OperationClass\OperationSub(); 
  22.                 break
  23.             case '*'
  24.                 $operation = new OperationClass\OperationMul(); 
  25.                 break
  26.             case '/'
  27.                 $operation = new OperationClass\OperationDiv(); 
  28.                 break
  29.             default
  30.                 throw  new \Exception("沒有此運算符"); 
  31.             break
  32.         } 
  33.         return $operation
  34.     } 

客戶端調用程序:

  1. <?php 
  2. /** 
  3.  * 工廠設計模式 
  4.  */ 
  5. use SimpleFactory\OperationFactory; 
  6. define('ROOT_PATH',dirname(dirname(__FILE__)).'/'); 
  7. /** 
  8.  * 自動加載類文件 
  9.  * @param $class 
  10.  */ 
  11. function __autoload($class){ 
  12.     if(strpos($class,'OperationClass')){ 
  13.         $class_path = substr($class,0,strrpos($class,'\\')); 
  14.     }else
  15.         $class_path = str_replace('\\','/',$class); 
  16.     } 
  17.     include_once ROOT_PATH.$class_path.'.class.php'
  18. //調用工廠方法生成運算對象 
  19. $oper = OperationFactory::createOpertaion('/'); 
  20. $result = $oper->getResult(1,10); 
  21. var_dump($result); 

UML類圖:

使用VISO做的類圖有些差

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章