本篇文章带大家了解一下PHP设计模式中的抽象工厂模式。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。
工厂模式系列中的重头戏来了,没错,那正是传闻中的抽象工厂模式。初次听到这个名字的时候你有什么感觉?反正我是感觉这货应该是非常高大上的,毕竟包含着“抽象”两个字。话说这两个字在开发中真的是有点高大上的感觉,一带上抽象两字就好像哪哪都很厉害了呢。不过,抽象工厂也确实可以说是工厂模式的大哥大。
其实只要理解了工厂方法模式,就很容易明白抽象工厂模式。怎么说呢?还是一样的延迟到子类,还是一样的返回指定的对象。只是抽象工厂里面不仅仅只返回一个对象,而是返回一堆。
GoF定义:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
GoF类图:
代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
|
商品的实现,东西很多吧,这回其实是有四件商品了分别是A1、A2、B1和B2,他们之间假设有这样的关系,A1和B1是同类相关的商品,B1和B2是同类相关的商品
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
|
而我们的工厂也是工厂1和工厂2,工厂1生产的是A1和B1这两种相关联的产品,工厂2生产的是A2和B2这两种商品。好吧,我知道这里还是有点抽象,可能还是搞不懂为什么要这样,我们继续以手机生产来举例。
我们的手机品牌起来了,所以周边如手机膜、手机壳也交给了富X康(AbstractFactory)来帮我搞定。上回说到,我已经有几款不同类型的手机了,于是还是按原来那样,衡阳工厂(Factory1)生产型号1001的手机(ProductA1),同时型号1001手机的手机膜(ProductB1)和手机壳(ProductC1)也是衡阳工厂生产出来。而型号1002的手机(ProductA2)还是在郑州工厂(Factory2),这个型号的手机膜(ProductB2)和手机膜(ProductC2)也就交给他们来搞定吧。于是,我还是只去跟总厂下单,他们让不同的工厂给我生产了一整套的手机产品,可以直接卖套装咯!!
完整代码:抽象工厂模式
https://github.com/zhangyue0503/designpatterns-php/blob/master/03.abstract-factory/source/abstract-factory.php
是不是看得还是有点晕。其实说简单点,真的就是在一个工厂类中通过不同的方法返回不同的对象而已。让我们再次用发短信的实例来讲解吧!
场景:这次我们有个业务需求是,不仅要发短信,还要同时发一条推送。短信的目的是通知用户有新的活动参加,而推送不仅通知有新的活动,直接点击就可以进去领红包了,是不是很兴奋。还好之前我们的选择的云服务供应商都是即有短信也有推送接口的,所以我们就直接用抽象工厂来实现吧!
短信发送类图
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
|
完整源码:短信发送工厂方法
https://github.com/zhangyue0503/designpatterns-php/blob/master/03.abstract-factory/source/abstract-factory-message-push.php
说明
推荐学习:《PHP视频教程》
Atas ialah kandungan terperinci 聊聊PHP中的抽象工厂模式. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!