简单工厂
原文:https://github.com/flyingalex/design-patterns-by-php/blob/master/files/chapter1.md
<?php
/**
* Operation
*/
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;
}
}
/**
* Add
*/
class OperationAdd extends Operation
{
public function getResult()
{
return $this->a + $this->b;
}
}
/**
* Mul
*/
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;
}
}
/**
* Operation Factory
*/
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;