设为首页 收藏本站
查看: 592|回复: 0

[经验分享] 浅述PHP设计模式(3)

[复制链接]

尚未签到

发表于 2017-4-6 09:59:27 | 显示全部楼层 |阅读模式
  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个设计模式了。不过,有些不同的是,这里的讨论,是没有代码示例的。如同几何老师只讲定理,不给出例题。因为,相对于设计模式,所有“例题”都是与实际脱钩的。我们的目标,是希望没有“例题”的讨论,更加有利于能够运用到实际当中。
  {注:文中一切,均属于本人理解,或本人的观点。因本人水平有限,所以,如果您发现错漏,欢迎指正}
  (待续)

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-360895-1-1.html 上篇帖子: php中简单的检测函数 下篇帖子: 浅述PHP设计模式(5)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表