大话PHP之工厂模式

我们其实听过很多设计模式,什么单例模式,注册树模式等等。这些语言的设计模式其实是为了一些特定场景而出现的解决方案,所以这就是为什么我们不仅仅要知道设计模式的怎么用,更要知道什么时候用,这个时候概念性的东西理解越透,我们代码层面的深度也就越深。

之前面试过一些phper,有的三四年的经验依旧对设计模式不熟悉。我也喜欢逛程序员的论坛,很多人认为,面试的时候问如何造飞机,实际工作如如何拧螺丝。其实我真的很反感这种说法,知道怎么用和什么时候用一定是存在天壤之别的。其实我们日常工作也是在拧螺丝,但是是否螺丝拧的越紧就越好呢,当然此处只是比喻。我们工作更多的时候是curl,不论缓存也好还是数据库也好还是高级一点的分布式,代码质量对于我们来说就尤为重要了,我见过10来秒的sql,在例会的时候这个人就被炒了,他结果没查对吗,肯定是对的,但是让程序走了许多弯路。总而言之,我见过的大神都是基础特别扎实,对各种设计模式和应用场景都是有相当深入的了解,所以我就出了大话篇,在看过很多文章加上自己的总结后进行的一系列的升华,当然,我的文章也不可避免的存在一些问题,欢迎大家指正,毕竟共同进步才是共赢。

工厂模式的介绍和场景


意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。

主要解决:主要解决接口选择的问题。

何时使用:我们明确地计划不同条件下创建不同实例时。

如何解决:让其子类实现工厂接口,返回的也是一个抽象的产品。

优点: 1、一个调用者想创建一个对象,只要知道其名称就可以了。 2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。 3、屏蔽产品的具体实现,调用者只关心产品的接口。

缺点:每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。

改进:此处可以参考thinkphp框架中config文件引入的代码:使用reflecationClass 和reflecationMethod相关函数对类进行实例化,不用判断类的标识。很大程度解决了工厂模式的缺点。

简单工厂模式/静态工厂模式

简单工厂模式又称静态工厂模式

具体实现:接口层,具体实例层,工厂产出层

通过工厂产出层管理实例层,通过接口层作为管理的统一标准


工厂方法

实现:多实例管理,相比简单工厂模式,更加复杂,但是相对而言解决了简单工厂模式的耦合性高,违反工厂模式封闭原则的问题。


工厂方法最大缺点就是实例太多,加一个产品的流程:加产品实例,加管理实例。

推荐:用简单工厂的改进版

抽象工厂:


意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

主要解决:主要解决接口选择的问题。

何时使用:系统的产品有多于一个的产品族,而系统只消费其中某一族的产品。

如何解决:在一个产品族里面,定义多个产品。

关键代码:在一个工厂里聚合多个同类产品。

抽象工厂管理多实例,实际上抽象类使用和注册树模式特别像,但是抽象类不需要提供类的标识,只要知道内部方法就可以调用类的方法

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。通常我们所说的工厂模式是指工厂方法模...
    zfylin阅读 5,151评论 0 7
  • 前言 关于设计模式,是一个永远说不完的也说不清的话题。毕竟在编程的世界里,没有最好的设计模式,只有最合适的设计模式...
    VV木公子阅读 5,590评论 0 9
  • 设计模式基本原则 开放-封闭原则(OCP),是说软件实体(类、模块、函数等等)应该可以拓展,但是不可修改。开-闭原...
    西山薄凉阅读 9,407评论 3 14
  • 半窗幽梦微虚茫, 飘渺画梅花淡妆。 遥遥幻梦何所思? 切切思君君不知。
    渃渔阅读 1,252评论 0 2
  • 无需改变、这就是你。
    那一抹儿流年阅读 1,135评论 0 0

友情链接更多精彩内容