关闭

9、策略模式

标签: 设计模式
121人阅读 评论(0) 收藏 举报
分类:
思考: 如果想增加取模运算又如何操作?

想一想简单工厂方法,是否有些相似? 又有哪些不同?

通过接口,隔离封装

通过继承,适应变化


工厂模式,我们着眼于得到对象,并操作对象,
策略模式,我们着重得到对象某方法的运行结果

<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);


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:13851次
    • 积分:507
    • 等级:
    • 排名:千里之外
    • 原创:38篇
    • 转载:1篇
    • 译文:0篇
    • 评论:4条
    文章分类
    最新评论