人一上了年纪,拼时间还是不够的,要利用方法,不一定每次事办功倍,但最起码得长远的看还是省心的。
我们平常在用框架时,很容易忽略面相对象的特性。尤其是在业务快速增长是时,调整是一件及其费力的事情,对于同样一个结果,重复花费太多时间显然不是最优结果,花更少的时间解决问题才是提高的地方。
为了很好地利用面向对象,我将我的理解写出来,尽可能代入场景去叙述。
首先介绍第一种工厂模式
工厂模式可以分为几种,先讲第一种,简单工厂模式。
我们要写一个计算器,实现加减就可以了
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();
其实给客户端最后两行就可以了,降低了耦合度,方便维护 。