PHP设计模式二(控制反转依赖注入)

  1. 控制反转和依赖注入 意义:控制反转(IOC)是一种思想,依赖注入(DI)是实施这种思想的方法。先看个小例子:

    很明显 A类的method方法依赖于BC类,这也是我们开发的过程中经常看到的和用到的。但是这里有个问题,一旦涉及函数改名,函数参数数量变动,甚至整个类结构的调整,我们也要对A类做出相应的调整
    IOC(控制反转)是处理这种问题的一个思路,DI(依赖注入)是实现这个思路的具体方法

高层模块不应该依赖于底层模块,两个都应该依赖抽象。

这里介绍一种方法:工厂模式注入
首先看到在A类 有很多new的操作,那么如果需要把A与BC类解耦就必须把new新对象的操作移除A类。很容易想到工厂模式。

class Factory{
    public function create($classname)
    {
        switch ($classname) {
            case 'B':
                return new B();
                break;
            
            case 'C':
                return new C();
            default:
                # code...
                break;
        }
    }
}
//A类可以修改成
class A{
    public $b;
    public $c;
    public function A1()
    {
        echo 'A';
    }
    public function method()
    {
        $factory = new Factory();//工厂类
        $this->b = $factory->create('B');
        $this->c = $factory->create('C');
        $this->b->method();
        $this->c->method();
    }
}

这里其实已经解耦部分了,至少如果B类和C类的构造函数要是发生变化,比如修改函数参数等,我们只需要改Factory类就可以实现。
那么对于BC类的方法,我们其实可以把BC类的方法抽象出来做成一个接口

interface DImethod{
    public function method();
}
class B implements DImethod{
    public function B1(){}
    public function method()
    {
        echo 'B';
    }
}
class C implements DImethod{
    public function C1(){}
    public function method()
    {
        echo 'C';
    }
}

这样在A就不在依赖于BC 而是依赖于factory类,而factory类依赖于BC类

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值