<?php
/**
* 简单工厂模式
* 定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。
*
* 1,定义抽象产品类,封装各种对象的公有方法。
* 2,定义具体产品类,并实现抽象产品类中的方法。
* 3,定义工厂类,静态方法,返回不同的具体产品对象。
**/
/**
* 运算类
**/
abstract class Operation
{
abstract public function getValue($num1,$num2);
}
/**
* 加法类
**/
class OperationPlus 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!');
} else {
return $num1/$num2;
}
} catch (Exception $e) {
echo $e->getMessage();
}
}
}
/**
* 算法工厂类
**/
class Factory
{
public static function getOperationObj($operate) {
switch ($operate) {
case '+':
return new OperationPlus();
break;
case '-':
return new OperationSub();
break;
case '*':
return new OperationMul();
break;
case '/':
return new OperationDiv();
break;
}
}
}
// 加法
$operation = Factory::getOperationObj('+');
echo $operation->getValue(10,11);
// 减法
$operation = Factory::getOperationObj('-');
echo $operation->getValue(10,11);
// 除法
$operation = Factory::getOperationObj('/');
echo $operation->getValue(10,0);
?>
php 简单工厂模式
最新推荐文章于 2023-04-18 17:57:08 发布