热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php简单的项目实例_PHP设计模式之工厂方法*解读

「PHP」工厂方法是针对每一种产品提供一个工厂类。通过不同的工厂实例来创建不同的产品实例。相比简单工厂[1],创建对象这件事不再交由一个类来创建:把简单
c436fa2bc9b9f8bec7e4b99bde3a7589.png

「PHP」工厂方法是针对每一种产品提供一个工厂类。通过不同的工厂实例来创建不同的产品实例。

相比简单工厂[1],创建对象这件事不再交由一个类来创建:把简单工厂拆分,每个产品由专门的一个简单工厂来实现,每个简单工厂实现工厂接口类。这样实现在同一等级结构中,支持增加任意产品。

工厂方法UML图:

8aec6638f79209318689c2c3f7c5302a.png
★官方PHP高级学习交流社群「点击」管理整理了一些资料,BAT等一线大厂进阶知识体系备好(相关学习资料以及笔面试题)以及不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货

简单工厂需要有4个角色:

  • Product接口类:用于定义产品规范;
  • 具体的产品实现,例如ConcreateProductA、ConcreateProductB;
  • 抽象工厂类IFactory:用于规范工厂;
  • 具体产品创建的简单工厂,例如ConcreateFactoryA、ConcreateFactoryB。

代码: ICar.php:定义产品规范:

namespace YjcSimpleFactory;interface ICar
{public function driver();
}

具体产品实现:

namespace YjcSimpleFactory;class Benz implements ICar
{public function driver(){echo 'benz driver.';}
}class Bmw implements ICar
{public function driver(){echo 'bmw driver.';}
}

抽象工厂类IFactory:

namespace YjcFactory;interface IFactory
{public static function makeCar();
}

具体工厂实现:

namespace YjcFactory;class FactoryBenz implements IFactory
{public static function makeCar(){return new Benz();}
}class FactoryBmw implements IFactory
{public static function makeCar(){return new Bmw();}
}

测试:

$car = FactoryFactoryBenz::makeCar();
$car->driver();

思考:如果不使用工厂模式来实现我们的例子,也许代码会减少很多——只需要实现已有的车,不使用多态。但是在可维护性上,可扩展性上是非常差的(你可以想象一下添加一辆车后要牵动的类)。因此为了提高扩展性和维护性,多写些代码是值得的,尤其是复杂项目里。

  • 优点:
  1. 工厂方法模式就很好的减轻了工厂类的负担,把某一类/某一种东西交由一个工厂生产;(对应简单工厂的缺点1)
  2. 同时增加某一类”东西“并不需要修改工厂类,只需要添加生产这类”东西“的工厂即可,使得工厂类符合开放-封闭原则。
  • 缺点:
  1. 相比简单工厂,实现略复杂。
  2. 对于某些可以形成产品族的情况处理比较复杂。

  对于缺点2,我们可以借用抽象工厂来实现。

八重樱:PHP 互联网架构师成长之路*「设计模式」终极指南

八重樱:PHP 互联网架构师 50K 成长指南+行业问题解决总纲(持续更新)

八重樱:面试10家公司,收获9个offer,2020年PHP 面试问题

★如果喜欢我的文章,想与更多资深开发者一起交流学习的话,获取更多大厂面试相关技术咨询和指导,欢迎加入我们的群-点击此处。

21493ca9b5022b999adb5be3035e9c2c.gif

参考

  1. ^PHP简单工厂模式的工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例。



推荐阅读
author-avatar
手机用户2502861713
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有