关于工厂模式

从最早开始读书的时候都听过工厂模式,那时候对所谓的依赖,解耦,并没有很深的印象。

读书的时候老师举个例子都会以动物来讲:

//动物的接口
interface Animal{
    function say();
}

这个时候我们定义一只猫的类

class Cat implements Animal{
    function say(){
        echo '猫喵喵叫';
    }
}

我们再定义一个狗的类

class Dog implements Animal{
    function say(){
        echo '狗汪汪叫';
    }
}

这时我们定义一个家的类
在没有工厂模式的时候

class Home{
    function test(){
        //我们需要一只猫
        $cat = new Cat();
        $cat -> say();
        //我们需要一只狗
        $dog = new Dog();
        $dog -> say();
    }
}

这样很正常不是么?
果真我还是图样图森破。

下面我们来看用工厂模式以后的效果

//定义动物工厂类
class AnimalFactory{
    function create($type){
        switch($type){
            case 'cat':
                return new Cat();
                break;
            case 'dog':
                return new Dog();
                break;
        }
    }
}

这个时候我们再来修改Home类

class Home{
    function test(){
        $factory = new AnimalFactory();
        //我们需要一只猫
        $cat = $factory -> create('cat');
        $cat -> say();
        //我们需要一只狗
        $dog = $factory -> create('dog');
        $dog -> say();
    }
}

卧槽 这特么不是一样么?你在逗我?这不还是有依赖么?

在我看来这只不过是把构建对象的方法不去new了 ,别的有什么区别么?

直到今天,我再看laravel的教程时,看到《Laravel 服务容器实例教程 —— 深入理解控制反转(IoC)和依赖注入(DI)》这一节时,我看到这样一句话“我们不再需要在超人初始化之初,去初始化许多第三方类,只需初始化一个工厂类,即可满足需求”。

so ? 我们以前需要引Cat和Dog两个类 现在我们只需要引入一个AnimalFactory类就行了
这就是差别。哈哈哈哈哈哈

但是我们的扩展变得更加方便了 ,当我们再来一只Pig的时候,只需要修改工厂类即可。。

文章里还有一句话是:这才刚刚开始。

是的,这才刚刚开始。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值