“PHP”工厂方法就是为每个产品提供一个工厂类。通过不同的工厂实例创建不同的产品实例。与简单工厂相比,对象的创建不再分配给一个类:简单工厂被拆分,每个产品由一个专门的简单工厂实现,每个简单工厂实现工厂接口类。这使得可以在相同的层次结构中添加任意产品。工厂方法UML图:PHP官方进阶学习交流社区“点击”管理整理部分资料,BAT等一线大厂进阶知识体系准备齐全(相关学习资料及笔试面试题)且不限to:分布式架构、高扩展、高性能、高并发、服务器性能调优、TP6、laravel、YII2、Redis、Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等知识点进阶进阶干货goods简单工厂需要有四个角色:产品接口类:用于定义产品规格;具体产品实现,如ConcreateProductA、ConcreateProductB;抽象工厂类IFactory:用于标准化工厂;用于特定产品创建的简单工厂,例如ConcreateFactoryA、ConcreateFactoryB。代码:ICar.php:定义产品规格:namespaceYjc\SimpleFactory;interfaceICar{publicfunctiondriver();}具体产品实现:namespaceYjc\SimpleFactory;classBenzimplementsICar{publicfunctiondriver(){echo'benzdriver.';}}classBmwimplementsICar{publicfunctiondriver(){echo'bmwdriver.';}}抽象工厂类IFactory:namespaceYjc\Factory;interfaceIFactory{publicstaticfunctionmakeCar();}具体工厂实现:namespaceYjc\Factory;classFactoryBenzimplementsIFactory{publicstaticfunctionmakeCar(){returnnewBenz();}}classFactoryBmw实现IFactory{publicstaticfunctionmakeCar(){returnnewBmw();}}测试:$car=Factory\FactoryBenz::makeCar();$car->driver();思考:如果我们不使用工厂模式来实现我们的例子,也许代码会减少很多——只需要实现现有的汽车,而不用使用多态。但是在可维护性方面,可扩展性很差(你可以想象一下加了车之后受影响的类)。因此,为了提高可扩展性和可维护性,值得编写更多的代码,尤其是在复杂的项目中。优点:工厂方法模式很好的减轻了工厂类的负担,将某类/某类东西交给一个工厂生产;(对应简单工厂的缺点1)同时,添加某类“东西”不需要修改工厂类,只需要添加一个生产这种“东西”的工厂即可,这样工厂类符合开闭原则。缺点:与简单工厂相比,实现稍微复杂一些。处理一些可以形成产品族的情况就比较复杂了。 对于缺点2,我们可以使用【抽象工厂】来实现。PHP互联网架构师成长之路*《设计模式》终极指南PHP互联网架构师50K成长指南+行业解题大纲(持续更新中)面试10家公司,拿到9个offer,2020年PHP面试题如果喜欢我的文章,如果想交流并与更多资深开发人员一起学习,获得更多与各大厂商面谈相关的技术咨询和指导,欢迎加入我们的群-点击这里。如果内容不错,希望大家多多支持鼓励点赞/点赞,欢迎一起交流;另外,大家有什么想看的问题和内容,可以在评论里提出
