public
function
calculate(
$num1
,
$num2
,
$operator
){
try
{
$result
=0;
switch
(
$operator
){
//......省略......
case
'%':
$result
=
$num1
%
$num2
;
break
;
//......省略......
}
}
catch
(Exception
$e
){
echo
"您输入有误:".
$e
->getMessage();
}
}
}
?>
代码分析:用以上方法实现给计算器添加新的功能运算有以下几个缺点
① 需要改动原有的代码块,可能会在为了“添加新功能”而改动原有代码的时候,不小心将
原有的代码改错了
② 如果要添加的功能很多,比如:‘乘方',‘开方',‘对数',‘三角函数',‘统计',或者添加
一些程序员专用的计算功能,比如:
And, Or, Not, Xor,这样就需要在
switch
语句中添加
N
个分支语句。想象下,一个计算功能的函数如果有二三十个
case
分支语句,代码将超过一
屏,不仅令代码的可读性大大降低,关键是,为了添加小功能,还得让其余不相关都参与
解释,这令程序的执行效率大大降低
解决途径:采用
OOP 的继承和多态思想
简单工厂模式的初步实现
代码如下
:
<?php
/**
* 操作类
* 因为包含有抽象方法,所以类必须声明为抽象类
*/
abstract
class
Operation{
//抽象方法不能包含函数体
abstract
public
function
getValue(
$num1
,
$num2
);
//强烈要求子类必须实现该功能函数
}
/**
* 加法类
*/
class
OperationAdd
extends
Operation {
public
function
getValue(
$num1
,
$num2
){
return
$num1
+
$num2
;