以下文字部分均为本人自己的想法与总结所以未必正确;
代码部分摘录自https://github.com/flyingalex/design-patterns-by-php
简单工厂模式:
优点:将调用者与创建者分离,调用者直接向工厂请求,减少代码的耦合(也就是说对象的创建交由工厂类负责),提高系统的可维护性与可扩展性
缺点:当要修改类的时候,工厂类也需要做出相对应的更改
操作步骤:
1、创建一个提供属性和方法的基础类或者接口
2、多个不同的类继承该基础类,并重写其中的属性和方法以达到不同的操作目的
3、简单工厂类中的一个方法负责生产对象,根据传入的参数不同生产不同的对象
4、调用者通过工厂类创建的对象调用对应的方法
个人比喻:
假如有调用者要买肉,现在四个工人,分别能加工鸡肉、鸭肉、猪肉、牛肉,不使用简单工厂,使用简单工厂只需要调用者对工厂说“我要xxx肉”就行了。
class Operation
{
protected $a = 0;
protected $b = 0;
public function setA($a)
{
$this->a = $a;
}
public function setB($b)
{
$this->b = $b;
}
public function getResult()
{
$result = 0;
return $result;
}
}
class OperationAdd extends Operation
{
public function getResult()
{
return $this->a + $this->b;
}
}
class OperationMul extends Operation
{
public function getResult()
{
return $this->a * $this->b;
}
}
/**
* Sub
*/
class OperationSub extends Operation
{
public function getResult()
{
return $this->a - $this->b;
}
}
/**
* Div
*/
class OperationDiv extends Operation
{
public function getResult()
{
return $this->a / $this->b;
}
}
/**
* 工厂
*/
class OperationFactory
{
public static function createOperation($operation)
{
switch ($operation) {
case '+':
$oper = new OperationAdd();
break;
case '-':
$oper = new OperationSub();
break;
case '/':
$oper = new OperationDiv();
break;
case '*':
$oper = new OperationMul();
break;
}
return $oper;
}
}
// 客户端代码
$operation = OperationFactory::createOperation('+');
$operation->setA(1);
$operation->setB(2);
echo $operation->getResult() . PHP_EOL;