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

浅述PHP设计模式(4)

    博客分类:
  • PHP
阅读更多

6、具体设计模式讨论。

(说明,这一部分是本人在此网站(iteye.com)的博客文章《设计模式应用浅述》基础上修改的。其目的是使其更易于理解与掌握。)
一、创建型模式——特别的变量问题

    Factory Method(工厂方法):定义一个用于创建对象的接口,让子类决定将哪一个类实例化。Factory Method使一个类的实例化延迟到其子类。
    什么是工厂?工厂是按订单生产不同的产品。当然,这些产品都是同一类的,或同一系列的。工厂方法就是指类中有一个成员函数,即方法,它是用来按你的指令创建你所需要的对象的。
    实现方式:我们可以看出,其中,拥有工厂方法的类是核心代码,产品是相对于此核心代码的具体的代码。所以:
    我们使用抽象类或接口定义来定义产品。实际的产品通过继承已定义的抽象类或实现已定义的接口来实现。
    工厂方法以品名(产品类名)为参数,根据此参数创建指定的“产品”。
    总结:让各种类(产品)成为变量。
    选择模式:选类

    Abstract Factory(抽象工厂):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
    相对于工厂方法,如前所述,它是一个系列或一个分类的产品,但如果,产品不是一个系列,或不是一个分类,我们就要让不同的工厂来进行生产。于是,工厂也被具体化了。
    实现方式:我们先要把前述的拥有具体的工厂方法的类去掉具体的实现,建一个抽象的工厂出来。而实际的工厂,则从抽象工厂继承。
    这里,工厂所面对的产品,可能是同一个接口或抽象类,也可能是多个接口或抽象类,前者,是因数据处理方式不同,而需要不同的工厂,后者,则可能因接口不同,而需要不同的工厂。
    同样,与产品创建一样,工厂的创建,最好也是以类名作为参数。
    特性:由于工厂方法类是抽象,所以,可能继承不同的工厂方法类的实现。从而有不同的工厂方法。
    总结:实现了产品的分类,并且不同类的产品,由不同的工厂创建。
    选择模式:选类,同时选工厂方法

    Builder(构造器):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
    构造器,也可以叫生产线。因为,类本身是一种装配模式。比如是使用合成/聚合复用的类。但由于其零部件组合不同,类的产生,则需要有不同的算法。而具体是算法则是,将各零部件的“生产”按需进行装配组合。
    实现方式:
    抽象的构造器(Builder)的类或接口,定义所有零部件创建需要实现的方法,由此继承的类负责零部件的创建方法的具体实现。
    抽象的构造器管理类Director,由此继承的类负责装配,即由具体的类确定按什么样的顺序调用哪些零部件的创建的方法。
    核心对象中使用构造器调用方法,根据传入的构造器参数创建不同的构造器管理的类,从而产生所需的对象。
    总结:让类的构建算法成为变量。
    选择模式:选择构造器。选择构建算法,即选择装配。
    注:如果构造器是单一的,则不需要定义抽象的构造器(Builder)的类或接口。
    如果构建算法是单一的,则不需要抽象的构造器管理类Director。
    当然,对于这二者的当前的不需要定义,一定要考虑潜在需求。如果有。则现在是单一的,也要定义好。

    Prototype(原型):用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。
    此问题的核心与具体分类三个层次:无数据对象,有数据对象,加载了运行时数据的对象。由此可以看出,此类应用最广的也是与数据相关的对象。这是因为,PHP本身不是完全的动态语言。当然PHP5.3开始支持闭包,可以动态给类添加方法。这一情况下,还可是这样的核心与具体分类三个层次:无涉及具体方法的对象,有涉及具体方法的对象,有运行时方法的对象。
    实现方式:抽象类中无任何具体数据或方法,它是抽象原型。具体的原型通过继承它来实现。但在实际使用时,代码先创建具体的原型,其后,复制(clone)原型生成实际使用的对象,并给其增加运行时数据或方法。
    总结:类中的部分属性当成变量:类中的部分数据在变,方法的算法也在变。将不变的数据与变化的方法放入到原型子类中。
    选择模式:选择半成品

    Singleton(单件):保证一个类仅有一个实例,并提供一个访问它的全局访问点。
    实现方式:通过静态的getInstance方法确认类的实例是否存在,不存在则创建,然后返回这个唯一的实例对象。
    总结:让有类成为超全局变量,使得一个类仅有一个实例。
    选择模式:唯一性选择

总结:可以看出,除单件模式以外,本小类中其它的模式,凡是相对具体的代码,都是使用抽象类,接口先定义好,通过这一方式应对程序中不同需求的变化。单件模式则是增加一个静态变量存于类中,通过静态方法检查有没有创建,保证只创建一个,是static的运用。

 (待续)

 

 

 

 

 

0
1
分享到:
评论

相关推荐

    网页设计艺术浅述.pdf

    网页设计艺术浅述.pdf

    浅述智能电网的发展.pdf

    浅述智能电网的发展

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

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

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

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

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

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

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

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

    浅述DDR的PCB设计.pdf

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

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

    【船体结构设计与建造的细节处理】 船体结构设计是船舶建造的核心环节,涉及到复杂的操作和多样的工作内容。为了确保设计的高效性和安全性,设计师需关注一系列细节问题。 首先,船体结构设计分为初步设计、详细...

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

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

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

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

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

    4. 生态化设计:生态化办公空间设计强调人与自然的和谐共存。在设计中融入绿色植物、生态景观等元素,不仅能够改善室内环境,还能提高员工的工作效率和心理健康。 5. 信息技术的应用:随着信息技术的发展,互联网...

    浅述混合现实现状1

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

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

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

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

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

    电子信息工程的发展浅述.pdf

    电子信息工程的发展浅述.pdf

    浅述人工智能技术在天气预测领域中的应用_韩仰.pdf

    4. 未来展望 - AI在气象预测领域的应用将继续深化,可能会涉及更复杂的天气事件,如极端气候的预测,以及对全球气候变化的长期预测。 - 随着技术的进步,AI将实现更快的数据处理速度,更强的模式识别能力和更高的...

    浅述操作系统的安全与防范.pdf

    浅述操作系统的安全与防范.pdf

Global site tag (gtag.js) - Google Analytics