linux社区爱心援助Linux认证系列教程业界动态站务新闻公司招聘建议留言网址大全LPI专题CISCO专题
设为首页
加入收藏
管理团队
JSP  
JAVA  
PERL  
 您的位置:首页 > 开发语言 > php >
栏目导栏
  php
  JSP
  ASP
  asp.net
  JAVA
  c/c++/c#
  perl
  JavaScript
  Basic
  Delphi
资料搜索
热门文章
·PHP生成静态页面的一些经验
·PHP无限分类与树型论坛的实现方
·php5学习笔记
·入门级PHP程序员面试题
·PHP 和 MySQL初学入门
·PHP入门速成
·vim的代码折叠
·文件下载统计php编程代码
·如何建立自己的新闻发布系统
·织梦CMS中文转换拼音函数研究
·Windows下Apache+Tomcat+MySQL
·PHP初学者头疼问题总结
·Cookie及其使用详细介绍
·生成sessionid和随机密码的例子
·使用无限生命期Session的方法
最新文章
·PHP入门速成
·用php实现广告轮播
·Zend Optimizer 问题浅析
·功能强大的CGI语言----PHP3
·用Session对Web页面进行保护
·PHP--进行模块化设计
·如何将PHP的结果输出到非PHP页
·如何开发一个虚拟域名系统
·PHP4调用自己编写的COM组件
·简单的页面缓冲技术(三)
·简单的页面缓冲技术(二)
·简单的页面缓冲技术(一)
·用Socket发送电子邮件(二)
·用Socket发送电子邮件(一)
·PHP/MySQL 购物车
Google
 
更好的构造开发模板 五种PHP设计模式2
[ 作者:  加入时间:2007-11-22 17:07:31  来自:Linux联盟收集整理 ]
清单 2. Factory2.php aqGLinux联盟
   aqGLinux联盟
  <?php aqGLinux联盟
  interface IUser aqGLinux联盟
  { aqGLinux联盟
   function getName(); aqGLinux联盟
  } aqGLinux联盟
   aqGLinux联盟
  class User implements IUser aqGLinux联盟
  { aqGLinux联盟
   public static function Load( $id ) aqGLinux联盟
   { aqGLinux联盟
    return new User( $id ); aqGLinux联盟
   } aqGLinux联盟
   aqGLinux联盟
   public static function Create( ) aqGLinux联盟
   { aqGLinux联盟
    return new User( null ); aqGLinux联盟
   } aqGLinux联盟
   aqGLinux联盟
   public function __construct( $id ) { } aqGLinux联盟
   aqGLinux联盟
   public function getName() aqGLinux联盟
   { aqGLinux联盟
    return "Jack"; aqGLinux联盟
   } aqGLinux联盟
  } aqGLinux联盟
   aqGLinux联盟
  $uo = User::Load( 1 ); aqGLinux联盟
  echo( $uo->getName()."\n" ); aqGLinux联盟
  ?> aqGLinux联盟
   aqGLinux联盟
    这段代码要简单得多。它仅有一个接口 IUser 和一个实现此接口的 User 类。User 类有两个创建对象的静态方法。此关系可用图 2 中的 UML 表示。 aqGLinux联盟
   aqGLinux联盟
   aqGLinux联盟
  图 2. IUser 接口和带有工厂方法的 user 类 aqGLinux联盟
   aqGLinux联盟
    在命令行中运行脚本产生的结果与清单 1 的结果相同,如下所示: aqGLinux联盟
   aqGLinux联盟
  % php factory2.php aqGLinux联盟
  Jack aqGLinux联盟
  % aqGLinux联盟
   aqGLinux联盟
   aqGLinux联盟
    如上所述,有时此类模式在规模较小的环境中似乎有些大材小用。不过,最好还是学习这种扎实的编码形式,以便应用于任意规模的项目中。 aqGLinux联盟
   aqGLinux联盟
    单元素模式 aqGLinux联盟
   aqGLinux联盟
    某些应用程序资源是独占的,因为有且只有一个此类型的资源。例如,通过数据库句柄到数据库的连接是独占的。您希望在应用程序中共享数据库句柄,因为在保持连接打开或关闭时,它是一种开销,在获取单个页面的过程中更是如此。 aqGLinux联盟
   aqGLinux联盟
    单元素模式可以满足此要求。如果应用程序每次包含且仅包含一个对象,那么这个对象就是一个单元素(Singleton)。清单 3 中的代码显示了 PHP V5 中的一个数据库连接单元素。 aqGLinux联盟
   aqGLinux联盟
    清单 3. Singleton.php aqGLinux联盟
   aqGLinux联盟
  <?php aqGLinux联盟
  require_once("DB.php"); aqGLinux联盟
   aqGLinux联盟
  class DatabaseConnection aqGLinux联盟
  { aqGLinux联盟
   public static function get() aqGLinux联盟
   { aqGLinux联盟
    static $db = null; aqGLinux联盟
    if ( $db == null ) aqGLinux联盟
     $db = new DatabaseConnection(); aqGLinux联盟
    return $db; aqGLinux联盟
   } aqGLinux联盟
   aqGLinux联盟
   private $_handle = null; aqGLinux联盟
   private function __construct() aqGLinux联盟
   { aqGLinux联盟
    $dsn = 'mysql://root:password@localhost/photos'; aqGLinux联盟
    $this->_handle =& DB::Connect( $dsn, array() ); aqGLinux联盟
   } aqGLinux联盟
   aqGLinux联盟
   public function handle() aqGLinux联盟
   { aqGLinux联盟
    return $this->_handle; aqGLinux联盟
   } aqGLinux联盟
  } aqGLinux联盟
   aqGLinux联盟
  print( "Handle = ".DatabaseConnection::get()->handle()."\n" ); aqGLinux联盟
  print( "Handle = ".DatabaseConnection::get()->handle()."\n" ); aqGLinux联盟
  ?> aqGLinux联盟
   aqGLinux联盟
    此代码显示名为 DatabaseConnection 的单个类。您不能创建自已的 DatabaseConnection,因为构造函数是专用的。但使用静态 get 方法,您可以获得且仅获得一个 DatabaseConnection 对象。此代码的 UML 如图 3 所示。 aqGLinux联盟
   aqGLinux联盟
   aqGLinux联盟
   aqGLinux联盟
  图 3. 数据库连接单元素 aqGLinux联盟
   aqGLinux联盟
    在两次调用间,handle 方法返回的数据库句柄是相同的,这就是最好的证明。您可以在命令行中运行代码来观察这一点。 aqGLinux联盟
   aqGLinux联盟
  % php singleton.php aqGLinux联盟
  Handle = Object id #3 aqGLinux联盟
  Handle = Object id #3 aqGLinux联盟
  % aqGLinux联盟
   aqGLinux联盟
    返回的两个句柄是同一对象。如果您在整个应用程序中使用数据库连接单元素,那么就可以在任何地方重用同一句柄。 aqGLinux联盟
   aqGLinux联盟
    您可以使用全局变量存储数据库句柄,但是,该方法仅适用于较小的应用程序。在较大的应用程序中,应避免使用全局变量,并使用对象和方法访问资源。 aqGLinux联盟
Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·更好的构造开发模板 五种PHP设计模式1  (2007-11-22 17:07:02)
 ·更好的构造开发模板 五种PHP设计模式  (2007-08-28 10:20:24)