一、区别
- 简单工厂模式注重于返回对象,工厂模式是差异类继承抽象类,然后工厂直接调用对应的差异类
- 策略模式注重于返回行为结果,策略模式更加侧重于算法的替换,策略模式也是差异类继承抽象类,通过客户端实例化差异类,在通过工厂调用行为(方法)
二、代码示例
<?php
interface MathInterface
{
public function calculation($a, $b);
}
class MathAdd implements MathInterface
{
public function calculation($a, $b)
{
return $a + $b;
}
}
class MathSubtraction implements MathInterface
{
public function calculation($a, $b)
{
return $a - $b;
}
}
class MathMultiplication implements MathInterface
{
public function calculation($a, $b)
{
return $a * $b;
}
}
class Factory
{
private $obj;
public function calculation($type)
{
switch ($type){
case "+":
$this->obj = new MathAdd();
break;
case "-":
$this->obj = new MathSubtraction();
break;
case "*":
$this->obj = new MathMultiplication();
break;
default:
return false;
}
return $this->obj;
}
}
$obj = (new Factory())->calculation("+");
$val = $obj->calculation(1, 1);
interface StraMathInterface
{
public function calculation($a, $b);
}
class StraMathAdd implements MathInterface
{
public function calculation($a, $b)
{
return $a + $b;
}
}
class StraMathSubtraction implements MathInterface
{
public function calculation($a, $b)
{
return $a - $b;
}
}
class StraMathMultiplication implements MathInterface
{
public function calculation($a, $b)
{
return $a * $b;
}
}
class Strategy
{
private $obj;
public function __construct($obj)
{
$this->obj = $obj;
}
public function exec($a, $b)
{
return $this->obj->calculation($a, $b);
}
}
$obj = new Strategy(new MathAdd());
$val = $obj->exec(1, 1);