background image

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