设计模式-工厂模式

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

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

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

首先介绍第一种工厂模式

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

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

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

其实给客户端最后两行就可以了,降低了耦合度,方便维护



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值