简单工厂模式

 使用简单工厂实现计算器

  
  
  
  
  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做的类图有些差

 

你可能感兴趣的:(简单工厂模式,计算器)