您的位置: 天津信息港 > 养生

站长更好嘚构造开发模板五种PHP设计

发布时间:2019-10-15 06:02:28

10:09 来源:互联 :水色皇朝【纠错】人评论

A-A+ 怎么开淘宝店 站优化方法 创业如何获得投资 小米note顶配版评测 LOL活动

设计模式只是为Java架构师准备的至少您可能一直这样认为。实际上,设计模式对于每个人都非常有用。如果这些工具不是架构太空人的专利,那么它们又是什么?为什么说它们在PHP应用程序中非常有用?本文解释了这些问题。设计模式一书将设计模式引入软件社区,该书的作者是ErichGamma、RichardHelm、RalphJohnson和JohnVlissidesDesign(俗称四人帮)。所介绍的设计模式背后的核心概念非常简单。经过多年的软件开发实践,Gamma等人发现了某些具有固定设计的模式,就像建筑师设计房子和建筑物一样,可以为浴室的位置或厨房的构造方式开发模板。使用这些模板或者说设计模式意味着可以更快地设计更好的建筑物。同样的概念也适用于软件。设计模式不仅代表着更快开发健壮软件的有用方法,而且还提供了以友好的术语封装大型理念的方法。例如,您可以说您正在编写一个提供松散耦合的消息传递系统,也可以说你正在编写名称为观察者的模式

。用较小的示例展示模式的价值是非常困难的。这往往有些大材小用的意味,因为模式实际上是在大型代码库中发挥作用的。本文不展示大型应用程序,所以您需要思索的是在您自己的大型应用程序中应用示例原理的方法而不是本文演示的代码本身。这不是说您不应该在小应用程序中使用模式。很多良好的应用程序都以小应用程序为起点,逐渐发展到大型应用程序,所以没有理由不以此类扎实的编码实践为基础。既然您已经了解了设求反馈列表并获取与特定反馈相关的文章

。清单p<?phpinterfaceIUser{ functiongetName();}classUserimplementsIUser{ publicfunction__construct($id){} publicfunctiongetName() {returnJack; }}classUserFactory{ publicstaticfunctionCreate($id) {returnnewUser($id); }}$uo=UserFactory::Create(1);echo($uo->getName().\n);?>IUser接口定义用户对象应执行什么操作。IUser的实现称为User,UserFactory工厂类则创建IUser对象。此关系可以用图1中的UML表示

。图1.工厂类及其相关IUser接口和用户类#p#分页标题#e#

单元素模式某些应用程序资源是独占的,因为有且只有一个此类型的资源。例如,通过数据库句柄到数据库的连接是独占的。您希望在应用程序中共享数据库句柄,因为在保持连接打开或关闭时,它是一种开销,在获取单个页面的过程中更是如此。单元素模式可以满足此要求。如果应用程序每次包含且仅包含一个对象,那么这个对象就是一个单元素(Singleton)。清单3中的代码显示了PHPV5中的一个数据库连接单元素。清单p<?phprequire_once(p);classDatabaseConnection{ publicstaticfunctionget() {static$db=null;if($db==null) $db=newDatabaseConnection();return$db; } private$_handle=null; privatefunction__construct() {$dsn='mysql://root:password@localhost/photos';$this->_handle=DB::Connect($dsnarray()); } publicfunctionhandle() {return$this->_handle; }}print(Handle=.DatabaseConnection::get()->handle().\n);print(Handle=.DatabaseConnection::get()->handle().\n);?>此代码显示名为DatabaseConnection的单个类。您不能创建自已的DatabaseConnection,因为构造函数是专用的。但使用静态get方法

,您可以获得且仅获得一个DatabaseConnection对象。此代码的UML如图3所示。图3.数据库连接单元素#p#分页标题#e#

观察者模式观察者模式为您提供了避免组件之间紧密耦合的另一种方法。该模式非常简单:一个对象通过添加一个方法(该方法允许另一个对象,即观察者注册自己)使本身变得可观察。当可观察的对象更改时,它会将消息发送到已注册的观察者。这些观察者使用该信息执行的操作与可观察的对象无关。结果是对象可以相互对话,而不必了解原因。一个简单示例是系统中的用户列表。清单4中的代码显示一个用户列表,添加用户时,它将发送出一条消息

。添加用户时,通过发送消息的日志观察者可以观察此列表。清单p<?phpinterfaceIObserver{ functionalign=center图4.可观察的用户列表和用户列表事件日志程序#p#分页标题#e#

命令链模式命令链模式以松散耦合主题为基础,发送消息、命令和请求,或通过一组处理程序发送任意内容。每个处理程序都会自行判断自己能否处理请求。如果可以,该请求被处理,进程停止。您可以为系统添加或移除处理程序

,而不影响其他处理程序。清单5显示了此模式的一个示例。清单p<?phpinterfaceICommand{ functionalign=center图5.命令链及其相关命令#p#分页标题#e#

策略模式我们讲述的一个设计模式是策略模式。在此模式中,算法是从复杂类提取的,因而可以方便地替换。例如,如果要更改搜索引擎中排列页的方法,则策略模式是一个不错的选择。思考一下搜索引擎的几个部分一部分遍历页面,一部分对每页排列,另一部分基于排列的结果排序。在复杂的示例中,这些部分都在同一个类中。通过使用策略模式,您可将排列部分放入另一个类中,以便更改页排列的方式,而不影响搜索引擎的其余代码。作为一个较简单的示例,清单6显示了一个用户列表类,它提供了一个根据一组即插即用的策略查找一组用户的方法。清单p<?phpinterfaceIStrategy{ functionfilter($record);}classFindAfterStrategyimplementsIStrategy{ private$_name; publicfunction__construct($name) {$this->_name=$name; } publicfunctionfilter($record) {returnstrcmp($this->_name$record)<=0; }}classRandomStrategyimplementsIStrategy{ publicfunctionfilter($record) {returnrand(01)>=0.5; }}classUserList{ private$_list=array(); publicfunction__construct($names) {if($names!=null){ foreach($namesas$name) {$this->_list[]=$name; }} } publicfunctionadd($name) {$this->_list[]=$name; } publicfunctionfind($filter) {$recs=array();foreach($this->_listas$user){ if($filter->filter($user))$recs[]=$user;}return$recs; }}$ul=newUserList(array(AndyJackLoriMegan));$f1=$ul->find(newFindAfterStrategy(J));print_r($f1);$f2=$ul->find(newRandomStrategy());print_r($f2);?>图6.用户列表和用于选择用户的策略 查看更多相似文章

如何做有赞微商城
微信有哪些小程序
快手上卖货怎么操作
猜你会喜欢的
猜你会喜欢的