首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | 镜像站
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
Linux资讯 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>编程开发>php>php文摘>正文

更好的构造开发模板 五种PHP设计模式

http://www.oklinux.cn  2007-11-09  来源:  oklinux搜集整理  会员收藏  游客收藏  【 】 
  设计模式只是为 Java 架构师预备的 —— 至少您可能一直这样认为。实际上,设计模式对于每个人都非常有用。假如这些工具不是 “架构太空人” 的专利,那么它们又是什么?为什么说它们在 PHP 应用程序中非常有用?本文解释了这些问题。

  设计模式 一书将设计模式引入软件社区,该书的作者是 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides Design(俗称 “四人帮”)。所介绍的设计模式背后的核心概念非常简单。经过多年的软件开发实践,Gamma 等人发现了某些具有固定设计的模式,就像建筑师设计房子和建筑物一样,可以为浴室的位置或厨房的构造方式开发模板。使用这些模板或者说设计模式 意味着可以更快地设计更好的建筑物。同样的概念也适用于软件。

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

  用较小的示例展示模式的价值是非常困难的。这往往有些大材小用的意味,因为模式实际上是在大型代码库中发挥作用的。本文不展示大型应用程序,所以您需要思考的是在您自己的大型应用程序中应用示例原理的方法 —— 而不是本文演示的代码本身。这不是说您不应该在小应用程序中使用模式。很多良好的应用程序都以小应用程序为起点,逐渐发展到大型应用程序,所以没有理由不以此类扎实的编码实践为基础。 既然您已经了解了设计模式以及它们的有用之处,现在我们来看看 PHP V5 的五种常用模式。

  工厂模式

  最初在设计模式 一书中,许多设计模式都鼓励使用松散耦合。要理解这个概念,让我们最好谈一下许多开发人员从事大型系统的艰苦历程。在更改一个代码片段时,就会发生问题,系统其他部分 —— 您曾认为完全不相关的部分中也有可能出现级联破坏。

  该问题在于紧密耦合 。系统某个部分中的函数和类严重依靠于系统的其他部分中函数和类的行为和结构。您需要一组模式,使这些类能够相互通信,但不希望将它们紧密绑定在一起,以避免出现联锁。 在大型系统中,许多代码依靠于少数几个要害类。需要更改这些类时,可能会出现困难。例如,假设您有一个从文件读取的 User 类。您希望将其更改为从数据库读取的其他类,但是,所有的代码都引用从文件读取的原始类。这时候,使用工厂模式会很方便。

  工厂模式 是一种类,它具有为您创建对象的某些方法。您可以使用工厂类创建对象,而不直接使用 new。这样,假如您想要更改所创建的对象类型,只需更改该工厂即可。使用该工厂的所有代码会自动更改。

  清单 1 显示工厂类的一个示列。等式的服务器端包括两个部分:数据库和一组 PHP 页面,这些页面答应您添加反馈、请求反馈列表并获取与特定反馈相关的文章。

  清单 1. Factory1.php

<?php
interface IUser
{
 function getName();
}

class User implements IUser
{
 public function __construct( $id ) { }

 public function getName()
 {
  return "Jack";
 }
}

class UserFactory
{
 public static function Create( $id )
 {
  return new User( $id );
 }
}

$uo = UserFactory::Create( 1 );
echo( $uo->getName()."\n" );
?>

  IUser 接口定义用户对象应执行什么操作。IUser 的实现称为 User,UserFactory 工厂类则创建 IUser 对象。此关系可以用图 1 中的 UML 表示。


图 1. 工厂类及其相关 IUser 接口和用户类

  假如您使用 php 解释器在命令行上运行此代码,将得到如下结果:

% php factory1.php
Jack
%

  测试代码会向工厂请求 User 对象,并输出 getName 方法的结果。

  有一种工厂模式的变体使用工厂方法。类中的这些公共静态方法构造该类型的对象。假如创建此类型的对象非常重要,此方法非常有用。例如,假设您需要先创建对象,然后设置许多属性。此版本的工厂模式会将该进程封装在单个位置中,这样,不用复制复杂的初始化代码,也不必将复制好的代码在在代码库中到处粘贴。 清单 2 显示使用工厂方法的一个示例。

  清单 2. Factory2.php

<?php
interface IUser
{
 function getName();
}

class User implements IUser
{
 public static function Load( $id )
 {
  return new User( $id );
 }

 public static function Create( )
 {
  return new User( null );
 }

 public function __construct( $id ) { }

 public function getName()
 {
  return "Jack";
 }
}

$uo = User::Load( 1 );
echo( $uo->getName()."\n" );
?>

  这段代码要简单得多。它仅有一个接口 IUser 和一个实现此接口的 User 类。User 类有两个创建对象的静态方法。此关系可用图 2 中的 UML 表示。


图 2. IUser 接口和带有工厂方法的 user 类

  在命令行中运行脚本产生的结果与清单 1 的结果相同,如下所示:

% php factory2.php
Jack
%
共4页: 上一页 1 [2] [3] [4] 下一页

上一篇:怎样在PHP 中运用 SimpleXML 处理任务   下一篇:PHP5中PDO的简单使用


收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·PHP5中PDO的简单使用
·怎样在PHP 中运用 SimpleXML 处理任务
·PHP语言发展历史
·PHP正式进入IIS微软与Zend携手推动PHP语言发展
·突破Windows 2003 PHP服务器的新思路
·PHP5.2 APACHE2.2 BugFree1.0的安装
·怎样才能成为PHP高手?学会
·为PHP5定做 ZendBox 将明年初发布
·Discuz! 5.0论坛常见问题解答
·看图说话 从Discuz! 4.1升级到5.0
·构建可配置PHP应用程序的正确方式
·Discuz!使用技巧:如何隐藏论坛分类的名称?
·安装JDK 就可同时运行PHP和Java?
·php有哪些优点
·PHP MySQL应用中使用XOR运算加密算法
·PHP开发框架总结
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·OpenBSD可加载内核模块编程完全指南
·xml php动态载入与分页
·对于开发SMS初学者的,经常用到的几个
·PHP调用三种数据库的方法3
·PHP调用三种数据库的方法2
·PHP调用三种数据库的方法1
·谈谈PHP语法3
·无数据库的详细域名查询程序PHP版5
·关于密码校验
·Servlet、Jsp中的多国语言显示
·Windows下配置PHP环境
·Zend Studio 5 Beta
  阅读排行
·OpenBSD可加载内核模块编程完全指南
·php5学习笔记
·Servlet、Jsp中的多国语言显示
·怎样才能成为PHP高手?学会
·PHP5中PDO的简单使用
·专家预言:PHP将比Java更受欢迎
·PHP调用三种数据库的方法1
·PHP强制对象类型之instanceof操作符
·突破Windows 2003 PHP服务器的新思路
·在linux上建jsp環境
·PHP做Web项目的优缺点
·(PHP)模板引擎Smarty介绍
·PHP5.2 APACHE2.2 BugFree1.0的安装
·构建可配置PHP应用程序的正确方式
·看图说话 从Discuz! 4.1升级到5.0
网摘收藏: