您的位置:首页 > 其它

设计模式-工厂模式

2015-12-13 18:48 162 查看
人一上了年纪,拼时间还是不够的,要利用方法,不一定每次事办功倍,但最起码得长远的看还是省心的。

我们平常在用框架时,很容易忽略面相对象的特性。尤其是在业务快速增长是时,调整是一件及其费力的事情,对于同样一个结果,重复花费太多时间显然不是最优结果,花更少的时间解决问题才是提高的地方。

为了很好地利用面向对象,我将我的理解写出来,尽可能代入场景去叙述。

首先介绍第一种工厂模式

工厂模式可以分为几种,先讲第一种,简单工厂模式。

我们要写一个计算器,实现加减就可以了

function main(numberA,numberB,Type){
$result = 0;
switch(Type){
case '+':
//加法
$result  = $numberA + $numberB;
break;
case '-':
// 减法
$result = $numberA - $numberB;
brea;
default:
breal;
}
return $result;
}

结果 = main(数量1,数量2,方式)


可能平常这样写很正常,如果的你的加法给网站用,也给客户端用,还当对外接口,需求都不统一,一个改了全都要改,很容易出错,当然不嫌累,也可以一个一个改。

我们可以把利用工厂模式进行简化。

//  定义抽象类
abstract class operation{
protected $_numberA = 0;
protected $_numberB = 0;
protected $_result  = 0;

public function __construct($A,$B) {
$this->_numberA= $A;
$this->_numberB= $B;
}

public function setNumber($A,$B){
$this->_numberA = $A;
$this->_numberB = $B;
}

abstract function getResult();

}


下面是每个具体方法

class AddFun extends operation{
public function getResult(){
$this->_result = $this->_numberA + $this->_numberB;
return $this->_result;
}
}

class SubFun extends operation{
public function getResult(){
$this->_result = $this->_numberA + $this->_numberB;
return $this->_result;
}
}


工厂组装

// 按需加载
class operaFactory{
private static $res;
public static function createOpera($type,$A,$B){
switch($type){
case 1:
self::$res = new AddFun($A,$B);
break;
case 2:
self::$res = new SubFun($A,$B);
break;
default:
break;
}
return self::$res;
}

}


直接调用

$result = operaFactory::createOpera(1,2,3);

echo $result->getResult();


其实给客户端最后两行就可以了,降低了耦合度,方便维护。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息