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

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

[复制链接]

尚未签到

发表于 2017-4-5 06:24:33 | 显示全部楼层 |阅读模式
  1、设计模式是什么?
  先用比喻来回答:
假如面向对象是兵器,那么,设计模式是一套武术套路,是一本编程人员均需要的葵花宝典。
假如面向对象是一个算盘,那么,设计模式就如同是珠算口诀。学珠算是要记口诀的。但会打算盘的是不用口诀的。并不是不用,而是在用时,己没有文字或模式的具体概念干扰了。
假如面向对象是五笔字型,那么,设计模式,就是五笔字型的口诀。但会打字的,则是想字读码,或看字读码,已不再需要口诀了。
学习设计模式,成为一个PHP核心代码编写高手,需要的就象前述的那种境界。
要达到这样的境界,是要明白,看设计模式示例代码,最终目标是能让自己遇到问题时立刻能够给出类与类之间的结构设计,而不是找出设计模式参考,看哪个模式适合。如同学五笔时记口诀的目标是看字读码或想字读码。而不是每次用口诀去对。
那么,学习设计模式,就需要有确当的方法。
  2、再问设计模式是什么?
  用设计模式的作用来回答:
设计模式是用来组织应用的结构的。使用设计模式,能够使你的应用拥有一个清析的,可维护,可扩展,松耦合的应用架构。、
  
对于一个应用,特别是大型的WEB应用,我们希望它有一个清析的架构。
为了实现这一点,首先我们要做的是:要把核心代码与非核心代码分开。
那么,什么是核心代码?什么是非核心代码呢?
而核心代码则是,大家都需要用到的,在应用中会有很多地方调用的,不涉及具体问题的代码。
非核心代码则与具体问题有关。
当我们要把要把核心代码与非核心代码分开时,会遇到以下两种情况:
第一、是由具体的部分调用核心的。这种情况下,就需要把核心代码封装成具体代码可以方便调用的类即可。
第二,是则核心的部分调用非核心的。这种情况是比较复杂的。因为非核心部涉及具体的问题,会因不同的具体问题而变化。这种情况相对复杂。PHP5,作为完全面向对象的语言,提供了面向对象中针对这一方面需求有的所有的功能。
这些功能包括:抽象方法,抽象类,最终方法,最终类,接口。这些功能的基本用途如下:
接口:如果核心代码需要调用一个具体的类,这时,我们可以把这个具体的类先定义为接口,这就是说,一个只有接口名(相当于类名)和所有未实现具体代码的函数(方法)构成的一个结构。这样做的目的,是要告诉那些所有实现具体代码的人,这个类该怎样做,核心代码才能正确调用。
抽象类:假如,接口中存在已实现的方法代码,那么,就不能再用接口进行定义,而是要用抽象类,将没有具体实现的方法定义类抽象方法。
最终方法:如果某一个方法在抽象类中实现后,不可以在子类中重写,则需定义为最终方法。
最终类,哪果某一个类,不允许被继承,则此类可定义为最终类保护起来。
由此可见,抽象方法,抽象类,最终方法,最终类,接口这些功能,目的是让你核心代码调用具体代码时,为具体代码实现一个约定,保证具体代码实现时遵守这个约定,从而保证核心代码能调用成功。
设计模式,实际上基本都是针对核心代码调用具体代码的场景的。
理解了这一点,那么,学会并真正领悟设计模式就相当简单多了。
我们根据这一点,就能从设计模式的例子代码中搜索线索:
这一模式中定义了哪些接口与抽象类?
这一模式中的核心代码调用具体代码的调用关系是什么?然后,你不再需要记住这些代码是如何实现的。而是遇到具体问题时,你能够不用考滤就自然用上了某一模式了。
  
3、三问设计模式是什么?
  其实上面的回答已差不多了。
设计模式,是针对核心代码调用具体代码的场景,对其进行总结归纳,在此基础上得出的一套实用的编程套路。并且,这些套路,是以一些基本的架构原则前提,保证架构的清析的,可维护,可扩展,松耦合。这一些基本原则,现在被简称为SOLID原则。(这是因为,这五个原则的第一个字母组合起来,正好是SOLID这个单词)。
SOLID原则是指:
SRP:The Single Responsibility Principle     单一责任原则   功能多少
OCP:The Open Closed Principle                 开放封闭原则  应对变化
LSP: The Liskov Substitution Principle        里氏替换原则  分类明确
ISP:  The Interface Segregation Principle    接口分离原则  方便组合
DIP:  The Dependency Inversion Principle  依赖倒置原则   面向对象的功能
以上首字母简写,即是SOLID
实际上,面向对象的原则中,还有:
CARP: The Composite/Aggregate Reuse Principle 合成聚合复用原则
LoD:       The Law of Demeter 迪米特法则
IoC:        The Inversion of Conntrol 控制倒置原则
因为,这些都是面向对象应用必须遵循的基本原则,所以,要真正学会设计模式,必须要先弄懂它们。以下进行分述。
(待续)

运维网声明 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-360233-1-1.html 上篇帖子: 打造超酷的PHP数据饼图 下篇帖子: 浅述PHP设计模式(2)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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