`
bardo
  • 浏览: 378833 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
D1407912-ab64-3e76-ae37-b31aa4afa398
浅述PHP设计模式
浏览量:11817
9d6df9f7-91da-3787-a37c-0e826525dd5d
Zend Framewor...
浏览量:10127
85b628bd-a2ed-3de2-a4b1-0d34985ae8b6
PHP的IDE(集成开发环...
浏览量:9516
社区版块
存档分类
最新评论

浅述PHP设计模式(1)

    博客分类:
  • PHP
阅读更多

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 楼 yuhao_1202 2011-03-30  
[设计模式,是针对核心代码调用具体代码的场景],这一点不是很赞同。希望详细解说一下。

相关推荐

    网页设计艺术浅述.pdf

    网页设计艺术浅述.pdf

    浅述混合现实现状1

    浅述混合现实技术在设计教学场景中的应用[J]. 大观, 2017(11). [3] 李婧濛. 浅谈增强现实技术(AR)在建筑领域的应用及发展[J]. 建筑工程技术与设计, 2016(1 混合现实技术的不断发展将引领我们进入一个全新的交互...

    浅述智能电网的发展.pdf

    浅述智能电网的发展

    浅述中国城市广场设计的雷同化现象.docx

    浅述中国城市广场设计的雷同化现象.docx

    浅述真空冷冻干燥机设计与计算.pdf

    不过,我可以根据文件标题《浅述真空冷冻干燥机设计与计算.pdf》展开相关知识点的讨论。 真空冷冻干燥机是一种用于食品、药品和生物制品等领域的干燥设备,它通过冷冻干燥(也称为升华干燥)过程,将预冻的物料在...

    浅述旅游地图制作中的色彩设计.docx

    浅述旅游地图制作中的色彩设计 本文从色彩心理、色彩对比设计、色彩符号设计几个方面浅述了如何在色彩方面提升旅游地图制作的美感。以下是本文的详细知识点解释: 一、色彩心理 色彩的心理效应是复杂的,涉及到人...

    浅述机电一体化链条输送设备设计

    ### 浅述机电一体化链条输送设备设计 #### 引言 随着工业自动化水平的不断提升,各种类型的输送设备在生产线上扮演着越来越重要的角色。其中,链条输送设备因其可靠性高、适用范围广等特点,在众多输送设备中...

    浅述DDR的PCB设计.pdf

    - 参数设定:手动和自动模式的切换,以及控制参数如AL1、AL2、AH1、AH2等,这些参数对于控制系统的性能至关重要。 - 控制系统稳定性:系统经过实际应用的检验,能够达到生产要求,且长时间运行稳定,大大提高了生产...

    浅述船体结构设计与建造的细节处理

    从最初的初步设计到详细设计,再到生产设计,每个阶段都承载着对船舶性能与安全至关重要的设计细节。本文将详细探讨船体结构设计与建造过程中的细节处理,揭示如何通过周密的设计规划和精确的建造工艺提升船舶的整体...

    浅述云计算在平面设计中的应用.pdf

    标题所涉及的知识点为“云计算在平面设计中的应用”。云计算是一种通过网络提供动态可伸缩的虚拟化的资源池,这些资源可以...随着技术的不断进步,云计算与平面设计的结合将更加紧密,预计会有更多创新的应用模式出现。

    浅述医院信息化管理模式的转变.docx

    医院信息化管理模式的转变是当前医疗机构适应时代发展的重要课题。随着社会进步和科技的快速发展,医院必须更新管理模式,利用信息化手段提升服务质量,优化管理流程,确保患者满意度和医疗质量的提高。 国内医院...

    浅述当代互联网公司办公空间设计趋势.pdf

    1. 开放式办公空间:开放式的办公环境不仅能够提升团队间的交流效率,也能打破传统的等级界限,增强员工之间的互动与合作。例如,拳头游戏公司的办公区域采取完全开放的布局,使得员工可以在一个共享的环境中自由...

    浅述钛钢复合板焊接工艺.pdf

    浅述钛钢复合板焊接工艺

    基于信息化业务的高职计算机网络教学设计路径浅述.pdf

    本文旨在浅述基于信息化业务的高职计算机网络教学设计路径,以期为高职教育者提供有益参考。 首先,我们必须认识到当前高职计算机网络教学中存在的一些问题。例如,教学手段较为单一,多媒体展示虽然直观,但往往...

    浅述汽车企业管理控制系统.pptx

    浅述汽车企业管理控制系统.pptx

    浅述工程质量的控制论文.doc

    浅述工程质量的控制论文.doc

Global site tag (gtag.js) - Google Analytics