PHP设计模式之工厂模式
2021-01-29 12:18
标签:如何 switch 使用 code info sub 特性 过程 class 1. 抽象基类:类中定义抽象一些方法,用以在子类中实现 2. 继承自抽象基类的子类:实现基类中的抽象方法 3. 工厂类:用以实例化调用所有相对应的子类 如果现在需要增加一个求余的类,会非常的简单 测试执行:输出结果 11.5 PHP设计模式之工厂模式 标签:如何 switch 使用 code info sub 特性 过程 class 原文地址:https://www.cnblogs.com/cutcop/p/13202702.html
解决办法:使用一个单独的类来实现实例化的过程,这个类就是工厂 1 /**
2 * 工厂类,主要用来创建对象
3 * 功能:根据输入的运算符号,工厂就能实例化出合适的对象
4 */
5 class Factory
6 {
7 public static function createObj($operate){
8 switch ($operate){
9 case ‘+‘:
10 return new OperationAdd();
11 break;
12 case ‘-‘:
13 return new OperationSub();
14 break;
15 case ‘*‘:
16 return new OperationMul();
17 break;
18 case ‘/‘:
19 return new OperationDiv();
20 break;
21 case ‘%‘:
22 return new OperationRem();
23 break;
24 default:
25 break;
26 }
27 }
28 }
29
30 //调用工厂类静态方法
31 $test = Factory::createObj(‘/‘);
32 $result=$test->getValue(23,2);
33 echo $result;
34
35
36 /**
37 * 下面可以拆分成多个类文件,此处未来方便查看不做拆分
38 */
39
40 /**
41 *
42 * 定义个抽象的类,让子类去继承实现它
43 *
44 */
45 abstract class Operation{
46 //抽象方法不能包含函数体
47 abstract public function getValue($num1,$num2);//强烈要求子类必须实现该功能函数
48 }
49
50 /**
51 * 加法类
52 */
53 class OperationAdd extends Operation {
54 public function getValue($num1,$num2){
55 return $num1+$num2;
56 }
57 }
58 /**
59 * 减法类
60 */
61 class OperationSub extends Operation {
62 public function getValue($num1,$num2){
63 return $num1-$num2;
64 }
65 }
66 /**
67 * 乘法类
68 */
69 class OperationMul extends Operation {
70 public function getValue($num1,$num2){
71 return $num1*$num2;
72 }
73 }
74 /**
75 * 除法类
76 */
77 class OperationDiv extends Operation {
78 public function getValue($num1,$num2){
79 try {
80 if ($num2==0){
81 throw new Exception("除数不能为0");
82 }else {
83 return $num1/$num2;
84 }
85 }catch (Exception $e){
86 echo "错误信息:".$e->getMessage();
87 }
88 }
89 }
90
91 /**
92 * 新增加
93 * 求余类(remainder)
94 *
95 */
96 class OperationRem extends Operation {
97 public function getValue($num1,$num2){
98 return $num1 % $num2;
99 }
100 }