欢迎来到天天文库
浏览记录
ID:39918123
大小:81.17 KB
页数:11页
时间:2019-07-15
《五个经典PHP设计模式-php网站培训教程》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、五个经典PHP设计模式如果了解设计模式,您将能够更快地构建可靠的OO应用程序。但当整个开发团队知道各种模式时,您可以突然拥有非常高的带宽会话。您不再需要讨论将到处使用的所有类。相反,您可以与其他人谈论模式。“我要在这里引用一个单例(singleton),然后使用迭代器遍历对象集合,然后……”比遍历构成这些模式的类、方法和接口快很多。单是通信效率一项就值得花时间以团队的形式通过会话来研究模式。减少痛苦的教训每个设计模式都描述了一种经过验证的解决常见问题的方法。因此,您无需担心设计是不是正确的,只要您已经选择了提供所需优点的模式。
2、缺陷有句谚语说得好:“当您手中拿着一把锤子时,所有事物看上去都像钉子”。当您认为自己找到一个优秀模式时,您可能会尝试到处使用它,即使在不应当使用它的位置。记住您必须考虑正在学习的模式的使用目的,不要为了使用模式而把这些模式强行应用到应用程序的各个部分中。本文将介绍可用于改进PHP代码的五个模式。每个模式都将介绍一个特定场景。可以在下载部分中获得这些模式的PHP代码。要求要发挥本文的最大功效并使用示例,需要在计算机中安装以下软件:PHPV5或更高版本(本文是使用PHPV5.2.4撰写的)压缩程序,例如WinZIP(用于压缩可下载
3、的代码归档)注:虽然您也可以使用纯文本编辑器,但是我发现拥有语法高亮显示和语法纠错功能的编辑器真的很有帮助。本文中的示例是使用EclipsePHPDevelopmentTools(PDT)编写的。适配器模式在需要将一类对象转换成另一类对象时,请使用适配器模式。通常,开发人员通过一系列赋值代码来处理此过程,如清单1所示。适配器模式是整理此类代码并在其他位置重用所有赋值代码的优秀方法。此外,它还将隐藏赋值代码,如果同时还要设定格式,这样可以极大地简化工作。清单1.使用代码在对象之间赋值 classAddressDispl
4、ay{ private$addressType; private$addressText; publicfunctionsetAddressType($addressType) { $this->addressType=$addressType; } publicfunctiongetAddressType() { return$this->addressType; } publicfunctionsetAddressText($addressText) { $this->addressT
5、ext=$addressText; } publicfunctiongetAddressText() { return$this->addressText; }}classEmailAddress{ private$emailAddress; publicfunctiongetEmailAddress() { return$this->emailAddress; } publicfunctionsetEmailAddress($address) { $this->emailAddre
6、ss=$address; }}$emailAddress=newEmailAddress();/*PopulatetheEmailAddressobject*/$address=newAddressDisplay();/*Here'stheassignmentcode,whereI'massigningvalues fromoneobjecttoanother...*/$address->setAddressType("email");$address->setAddressText($emailAddress->getE
7、mailAddress());此示例将使用AddressDisplay对象把地址显示给用户。AddressDisplay对象有两部分:地址类型和一个格式化的地址字符串。在实现模式(参见清单2)后,PHP脚本将不再需要担心如何把EmailAddress对象转换成AddressDisplay对象。那是件好事,尤其是在AddressDisplay对象发生更改时或者控制如何把EmailAddress对象转换成AddressDisplay对象的规则发生更改时。记住,以模块化风格设计代码的主要优点之一就是,在业务领域发生一些更改时或者需要
8、向软件中添加新功能时尽可能少的使用更改。即使在执行普通任务(例如把一个对象的属性值赋给另一个对象)时,也请考虑使用此模式。清单2.使用适配器模式 classEmailAddressDisplayAdapterextendsAddressDisplay{ publ
此文档下载收益归作者所有