background image

 

五种常见的

PHP 设计模式

设计模式

 

 

一书将设计模式引入软件社区,该书的作者是 Erich Gamma、Richard 

Helm、Ralph Johnson 

 

和 John Vlissides Design

 “

(俗称 四人帮 )。所介绍的设计模式

背后的核心概念非常简单。经过多年的软件开发实践,Gamma 等人发现了某些具有固定
设计的模式,就像建筑师设计房子和建筑物一样,可以为浴室的位置或厨房的构造方式开
发模板。使用这些模板或者说设计模式

 意味着可以更快地设计更好的建筑物。同样的概念

也适用于软件。
设计模式不仅代表着更快开发健壮软件的有用方法,而且还提供了以友好的术语封装大型
理念的方法。例如,您可以说您正在编写一个提供松散耦合的消息传递系统,也可以说你
正在编写名称为观察者

 的模式。

用较小的示例展示模式的价值是非常困难的。这往往有些大材小用的意味,因为模式实际
上是在大型代码库中发挥作用的。本文不展示大型应用程序,所以您需要思索的是在您自

 —— 

己的大型应用程序中应用示例原理的方法

而不是本文演示的代码本身。这不是说您

不应该在小应用程序中使用模式。很多良好的应用程序都以小应用程序为起点,逐渐发展
到大型应用程序,所以没有理由
以此类扎实的编码实践为基础。

 

既然您已经了解了设计模式以及它们的有用之处,现在我们来看看 PHP V5 的五种常用模
式。

工厂模式

最初在设计模式

 一书中,许多设计模式都鼓励使用松散耦合。要理解这个概念,让我们最

好谈一下许多开发人员从事大型系统的艰苦历程。在更改一个代码片段时,就会发生问题,

 —— 

系统其他部分

您曾认为完全不相关的部分中也有可能出现级联破坏。

该问题在于紧密耦合

 。系统某个部分中的函数和类严重依赖于系统的其他部分中函数和类

的行为和结构。您需要一组模式,使这些类能够相互通信,但不希望将它们紧密绑定在一
起,以避免出现联锁。
在大型系统中,许多代码依赖于少数几个关键类。需要更改这些类时,可能会出现困难。
例如,假设您有一个从文件读取的

 

User

类。您希望将其更改为从数据库读取的其他类,

但是,所有的代码都引用从文件读取的原始类。这时候,使用工厂模式会很方便。
工厂模式

 是一种类,它具有为您创建对象的某些方法。您可以使用工厂类创建对象,而不

直接使用

 

new

。这样,如果您想要更改所创建的对象类型,只需更改该工厂即可。使用该

工厂的所有代码会自动更改。

 

清单 1 

 

显示工厂类的一个示列。等式的服务器端包括两个部分:数据库和一组 PHP 页面,

这些页面允许您添加反馈、请求反馈列表并获取与特定反馈相关的文章。

 

清单 1. Factory1.php

<?php