简单工厂模式
简单工厂模式的主要实现思路是通过一个工厂类实例化需求所需的功能类,这样做可以增加代码的可拓展性,降低耦合性。
1、创建抽象类,规范子类中需要定义的方法(抽象类中的方法在子类中必须被定义)
1 <?php 2 3 // 抽象类 定义算法方法 4 abstract class Operation{ 5 abstract public function getRes($numA,$numB); 6 }
2、创建具体的功能类
1 <?php 2 3 # 加法类 4 class OperationAdd extends Operation{ 5 public function getRes($numA,$numB){ 6 return $numA + $numB; 7 } 8 } 9 10 # 减法类 11 class OperationSub extends Operation{ 12 public function getRes($numA,$numB){ 13 return $numA - $numB; 14 } 15 } 16 17 # 乘法类 18 class OperationMul extends Operation{ 19 public function getRes($numA,$numB){ 20 return $numA * $numB; 21 } 22 } 23 24 # 除法类 25 class OperationDiv extends Operation{ 26 public function getRes($numA,$numB){ 27 try { 28 if ($numB == 0) { 29 throw new Exception("除数不能为0", 1); 30 }else{ 31 return $numA / $numB; 32 } 33 } catch (Exception $e) { 34 echo "错误信息:".$e->getMessage(); 35 } 36 37 } 38 }
3、创建核心--工厂类
1 <?php 2 3 class OperationFactory{ 4 public static function createOperate($operate){ 5 switch ($operate) { 6 case '+': 7 $oper = new OperationAdd(); 8 break; 9 case '-': 10 $oper = new OperationSub(); 11 break; 12 case '*': 13 $oper = new OperationMul(); 14 break; 15 case '/': 16 $oper = new OperationDiv(); 17 break; 18 } 19 return $oper; 20 } 21 }
4、模拟客户端
1 <?php 2 3 class Client{ 4 public function main(){ 5 $oper = OperationFactory::createOperate('+'); 6 $res = $oper->getRes(1,2); 7 echo $res; 8 } 9 } 10 11 $client = new Client(); 12 $client->main();
心得:
(1)将功能独立化,易于维护与拓展
(2)设计抽象类,规范子类的成员方法