友情提示:干货分享,自行补脑。
在上一篇文章中,我们使用简单工厂创造出了一个超人类,再来回顾一下我们是如何创造超人类的。
我们在超人类的构造方法中加入超人模组的new,这样我们在实例化超人类的时候,只需要传入超能力的类名和它的属性组成一个数组就可以实现超人在创建的时候就拥有众多超能力。
但是,我们在上一章的结尾也说了,这其实只是一个简单的开始而已。“超人”对"超能力"的变成了“超人“对”工厂“的依赖,但是这种依赖关系并没有解除。同时当我们的需求增多,我们需要更多地超能力的同时,我们必须修改工厂模组。下图是更多超能力在模组中的实现。
此处,你会发现当我们的超能力增多的时候,工厂增加了更多地生产线,变得臃肿和密集。有没有好的办法解决这个问题。此时我们需要解决两个问题:
1:解决超人类对超人模组也就是工厂的依赖
2:解决工厂中出现更多地超能力类
世间万物,川流不息,怪物横行,需要更多地超能力超人来拯救世界,当然我们也需要更多地超级精英来生产工厂工作,精英们都很傲娇,都觉得自己的工厂生产出来的东西无敌,那么生产出来的模组没有统一的接口,很抱歉的说,这样是不能被超人所接受的,我们不可能给每一个超人定制不同的接口类型。在这样的情况下我们必须统一接口规范,俗话说,无规矩不成方圆嘛。
我们给超能力定义一个接口,每一个超能力的实现都需要实现这个接口,这样我们对超能力就有了一个规范。
php接口问题请自行洗脑
接下来,我们开始定义新的超能力类:
这样我们的不同人写的不同的工厂都是遵循一个接口实现的。同时,我们需要对超人类进行改造:
这样做的目的是一个超人类的实现,提供的模组必须是一个ModuleInterface接口的实现。这样其他聪明的人才不会胡乱编造超人类。
接下来,我们看看超人是如何诞生的:
// 超能力模组
$superModule = new XPower;
// 初始化一个超人,并注入一个超能力模组依赖
$superMan = new Superman($superModule);
这样我们在实例化超人的时候,传入的不再是超能力的名字和属性,而是一个超能力模组,我们不必要在超人类的构造方法中实例化模组了。
注意:我们手动创造了一个超能力模组,手动将模组传入超人类的实例化中。
这样超人类其实还是依赖超人模组而存在的
这又是一个问题,我们为什么要手动创建,现在社会都是一个高效的社会,能不能自动创建,我只需要一条指令就可以创建一个对象出来多爽呀,你说是不是。
我们需要解决下面两个问题:
1:自动生产超人,也就是我需要一条指令就可以创建超人
2:超人类不在依赖超人模组,也就是不依赖超人工厂存在。
经过专家和精英们的讨论与研究,我们引入容器的概念:
容器 --> 工厂模式的升华loC容器
这将是我们下一篇中讲述的重点
(未完待续)