简单工厂模式又叫静态工厂方法模式,主要作用是通过一个简单工厂类来实例化(创建)各个类的对象,而不需要通过new来实例化对象。优点在于,工厂类中包含了一定的逻辑判断,会根据客户端的选择条件动态实例化相关的类。缺点在于,当需要增加新的功能类时,需要去修改工厂类。</p><p>以下内容以一个简单的计算器程序作为案例分析。第一步,定义Operation,是一个父类,有两个属性,表示用于计算的两个参数。
<span style="font-family: Arial, Helvetica, sans-serif;"><?php</span>
<span style="font-family: Arial, Helvetica, sans-serif;">/*</span>
* 计算类
*/
class Operation{
private $numA=0;
private $numB=0;
public function setNumA($numA)
{
$this->numA=$numA;
}
public function getNumA()
{
return $this->numA;
}
public function setNumB($numB)
{
$this->numB=$numB;
}
public function getNumB()
{
return $this->numB;
}
}
?>
第二步,定义一个接口,接口中声明实现运算的方法
<?php
/*
*工厂接口
*/
interface InterOperate{
function getResult();
}
?>
第三步,是一个加法运算类(省略减法类、乘法类、触发类等)
<?php
/**
* 加法运算类
*/
include_once "IOperate.php";
include_once 'Operation.php';
class OperationAdd extends Operation implements InterOperate
{
function getResult()
{
$result=$this->getNumA()+$this->getNumB();
return $result;
}
}
?>
最后,定义简单工厂类,用于创建各种类的对象实例。通常简单工厂类返回的对象都有一个公共父类。在这个例子中的公共父类就是Operation类,加法类、减法类都是Operation的子类。
<?php
include_once "OperationAdd.php";
include_once "OperationMinus.php";
class SimpleFactory {
static function createAdd()
{
return new OperationAdd;
}
static function createMinus()
{
return new OperationMinus;
}
}
?>
客户端代码如下:
<?php
/*
* 客户端代码
*/
include_once "OperationAdd.php";
include_once 'Operation.php';
include_once 'SimpleFactory.php';
$op=SimpleFactory::createAdd();
$op->setNumA(2);
$op->setNumB(4);
echo $op->getResult();
$om=SimpleFactory::createMinus();
$om->setNumA(45);
$om->setNumB(34);
echo "<br>";
echo $om->getResult();
?>