欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

浅述PHP设计模式(3)

程序员文章站 2022-03-02 16:58:49
...

5、其它面向对象的原则

CARP: The Composite/Aggregate Reuse Principle 合成聚合复用原则
合成聚合复用原则的定义:在一个新对象中使用一些已有的对象,使之成为新对象的一部分。新的对象通过向这些对象的委派达到复用的目的。
提出这一原则的根本点在于,很多编码的问题是滥用继承。通过SOLID原则,我们可能分出了较多的类。
如果最终我们仍是使用SOLID原则将这些类最终继承成为一个类,一下子将我们的松耦合的目标又破坏了。这是因为,继承实现是静态的,很难应对父类的变化。而使用合成聚合复用,则是动态的。
所以,这一原则简单来说可以这样理解,如果SOLID把一个类分成了多个类,则不要设法通过继承让其再成为一个类,而要使用合成聚合复用的手段。这就是说另行定义一个新类,或使用其中一个类,调用其它被分出的类。

LoD:       The Law of Demeter 迪米特法则
迪米特法则是:不要和陌生人说话。
这实际上是与单一职责原则已经对此有所强制。而这一法侧更强调细节。
迪米特法测中明确规定了哪些是朋友。除朋友之外,所有算法均不可以与朋友之外的数据对话。迪米特法则朋友的条件有:
1)当前对象本身
2)以参数形式传入本对象中的对象
3)当前对象的实例变量直接引用的对象
4)当前对象如果是一个聚集,那么,聚集中的元素也是朋友
5)当前对象所创建的对象
可以看出,迪米特法则有助于我们在编码时清楚界定核心与具体。并协助我们创建最松的耦合关系。


IoC:        The Inversion of Conntrol 控制倒置原则
控制倒置原则是指:不要调用我,让我来调用你。实际上就是指核心调用具体的一个模式。
这就是说,核心调用具体,并不是天生就有的,而是我们针对具体问题而做的设计。
这里,实际上产生了两个控制权的倒转:
第一,调用控制权倒转。由核心代码获得。
第二,流程控制权与具体实现控制权倒转,由具体代码获得。
具体而言,如果是让用户直接使用的类,调用控制权上由具体代码掌控的。而流程控制权与具体实现控制权已不存在,或者说已被类的编写者使用。
但当你要继承一个抽象类,或实现一个接口,则就产生了对应的控制倒置。
有人说,控制倒置原则与依赖倒置原则是同义原则。实际上二者并不是等同的。因为,当然,这二者所说的实际是同一问题的两个不同的层面。
控制倒置原则的要求是,交还具体代码的控制权,并强行使用调用控制权。这就是说,凡不属于核心代码的流程控制的一切,均交给具体代码处理。这样一来,我们就更易于处理核心调用具体时对抽象类或接口的定义。

有人说,弄通SOLID原则,或者再加上这三大原则,那么,23个设计模式根本不需要再看了。理论上来讲是这样的。但实际上,如果不背九九乘法表,能计算乘法的,此人是天才。接下来,我们要开始进一步讨论具体的23个设计模式了。不过,有些不同的是,这里的讨论,是没有代码示例的。如同几何老师只讲定理,不给出例题。因为,相对于设计模式,所有“例题”都是与实际脱钩的。我们的目标,是希望没有“例题”的讨论,更加有利于能够运用到实际当中。

{注:文中一切,均属于本人理解,或本人的观点。因本人水平有限,所以,如果您发现错漏,欢迎指正}

 (待续)