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

时间:2010-01-16 10:38:01   来源:第二电脑网  作者:第二电脑网

  第二电脑网导读: IUser   {    public static function Load( $id )    {     return new User( $id );    }       public static function Create( )    {     return new User( null );    }    ...
  正文:

清单 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
  %
  
  
    如上所述,有时此类模式在规模较小的环境中似乎有些大材小用。不过,最好还是学习这种扎实的编码形式,以便应用于任意规模的项目中。
  
    单元素模式
  
    某些应用程序资源是独占的,因为有且只有一个此类型的资源。例如,通过数据库句柄到数据库的连接是独占的。您希望在应用程序中共享数据库句柄,因为在保持连接打开或关闭时,它是一种开销,在获取单个页面的过程中更是如此。
  
    单元素模式可以满足此要求。如果应用程序每次包含且仅包含一个对象,那么这个对象就是一个单元素(Singleton)。清单 3 中的代码显示了 PHP V5 中的一个数据库连接单元素。
  
    清单 3. Singleton.php
  
  <?php
  require_once("DB.php");
  
  class DatabaseConnection
  {
   public static function get()
   {
    static $db = null;
    if ( $db == null )
     $db = new DatabaseConnection();
    return $db;
   }
  
   private $_handle = null;
   private function __construct()
   {
    $dsn = 'mysql://root:password@localhost/photos';
    $this->_handle =& DB::Connect( $dsn, array() );
   }
  
   public function handle()
   {
    return $this->_handle;
   }
  }
  
  print( "Handle = ".DatabaseConnection::get()->handle()."n" );
  print( "Handle = ".DatabaseConnection::get()->handle()."n" );
  ?>
  
    此代码显示名为 DatabaseConnection 的单个类。您不能创建自已的 DatabaseConnection,因为构造函数是专用的。但使用静态 get 方法,您可以获得且仅获得一个 DatabaseConnection 对象。此代码的 UML 如图 3 所示。
  
  
  
  图 3. 数据库连接单元素
  
    在两次调用间,handle 方法返回的数据库句柄是相同的,这就是最好的证明。您可以在命令行中运行代码来观察这一点。
  
  % php singleton.php
来源:http://www.002pc.com/master/College/Programming/PHP/11953.html

收藏到:

关于《更好的构造开发模板 五种PHP设计模式2》文章的评论

共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面

随机文章

    SQL Error: select * from ***_ecms_article where classid='86' and checked=1 order by rand() limit 10

顶出来的热门

    SQL Error: select * from ***_ecms_article where classid='86' and checked=1 order by diggtop desc,id desc limit 10
站内搜索: 高级搜索

热门搜索: Windows style 系统 tr IP QQ CPU 安装 function 注册 if td