您的位置:首页 > 编程语言 > PHP开发

php设计模式-简单工厂模式

2017-10-23 14:17 866 查看
①抽象基类:类中定义抽象一些方法,用以在子类中实现
②继承自抽象基类的子类:实现基类中的抽象方法
工厂类:用以实例化所有相对应的子类
<?php
/*
*定义个抽象的类,让子类去继承实现它
*/
abstract class Operation
{
//抽象方法不能包含函数体
abstract public function getValue($num1,$num2);//子类必须实现该函数功能
}

/*
*加法
*/
class OperationAdd extends Operation
{
public function getValue($num1,$num2){
return $num1 + $num2;
}
}

/**
* 减法
*/
class OperationSub extends Operation
{
public function getValue($num1,$num2){
return $num1 - $num2;
}
}

/**
* 乘法类
*/
class OperationMul extends Operation {
public function getValue($num1,$num2){
return $num1*$num2;
}
}

/**
* 除法
*/
class OperationDiv extends Operation{
public function getValue($num1,$num2){
try{
if($num2 == 0){
throw new Exception("除数不能为0", 1);
}else{
return $num1/$num2;
}
}catch(Exception $e){
echo "错误信息".$e->getMessage();
}
}
}

/**
* 求余类(remainder)
*
*/
class OperationRem extends Operation {
public function getValue($num1,$num2){
return $num1%$num12;
}
}

// 现在还有一个问题未解决,就是如何让程序根据用户输入的操作符实例化相应的对象呢?
// 解决办法:使用一个单独的类来实现实例化的过程,这个类就是工厂

/**
* 工程类,主要用来创建对象
* 功能:根据输入的运算符号,工厂就能实例化出合适的对象
*
*/
class Factory{
public static function createObj($operate){
switch($operate){
case '+':
return new OperationAdd();
break;
case '-':
return new OperationSub();
break;
case '*':
return new OperationMul();
break;
case '/':
return new OperationDiv();
break;
}
}
}
$test=Factory::createObj('/');
$result = $test->getValue(23,0);
var_dump($result);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计模式 php