思考: 如果想增加取模运算又如何操作?
想一想简单工厂方法,是否有些相似? 又有哪些不同?
通过接口,隔离封装
想一想简单工厂方法,是否有些相似? 又有哪些不同?
通过接口,隔离封装
通过继承,适应变化
工厂模式,我们着眼于得到对象,并操作对象,
策略模式,我们着重得到对象某方法的运行结果
<form method="post" action="">
<input type="text" name="op1">
<select name="op">
<option value="Add">+</option>
<option value="Sub">-</option>
<option value="Mul">*</option>
<option value="Div">/</option>
</select>
<input type="text" name="op2">
<input type="submit" value="计算">
</form>
<?php
interface Math
{
public function calc($op1, $op2);
}
class MathAdd implements Math
{
public function calc($op1, $op2)
{
return $op1 + $op2;
}
}
class MathSub implements Math
{
public function calc($op1, $op2)
{
return $op1 - $op2;
}
}
class MathMul implements Math
{
public function calc($op1, $op2)
{
return $op1 * $op2;
}
}
class MathDiv implements Math
{
public function calc($op1, $op2)
{
return $op1 / $op2;
}
}
//传来op,制造不同对象,并且调用
//封装一个虚拟计算器
class CMath
{
protected $calc = null;
public function __construct($type)
{
$calc = 'Math' . $type;
$this->calc = new $calc();
}
public function calc($op1, $op2)
{
return $this->calc->calc($op1, $op2);
}
}
$type = isset($_POST['op']) ? $_POST['op'] : '';
$op1 = isset($_POST['op1']) ? $_POST['op1'] : '';
$op2 = isset($_POST['op2']) ? $_POST['op2'] : '';
$cmath = new CMath($type);
echo $cmath->calc($op1, $op2);