登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

zczhangchi 的博客

学习笔记

 
 
 

日志

 
 

工厂模式和单例模式  

2009-10-30 10:00:12|  分类: php资料 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Factory

工厂模式允许在运行时实例化对象。它之所以叫工厂模式是因为它由一个对象工厂来负责被调用。一个工厂通过接受类的名称来实例化一个对象。

The Factory pattern allows for the instantiation of objects at runtime. It is called a Factory Pattern since it is responsible for "manufacturing" an object. A Parameterized Factory receives the name of the class to instantiate as argument.

Example #1 Parameterized Factory Method

de><?php
class
Example
{
    
// The parameterized factory method
    
public static function factory($type
)
     {
         if (include_once
'Drivers/' . $type . '.php'
) {
            
$classname = 'Driver_' . $type
;
             return new
$classname
;
         } else {
             throw new
Exception ('Driver not found'
);
         }
     }
}
?>
de>

Defining this method in a class allows drivers to be loaded on the fly. If the Example class was a database abstraction class, loading a MySQL and SQLite driver could be done as follows:

de><?php
// Load a MySQL Driver
$mysql = Example::factory('MySQL'
);

// Load a SQLite Driver
$sqlite = Example::factory('SQLite'
);
?>
de>

Singleton

单例模式支持那些需要只保存一个单独的实例的类。在数据库链接的时候通常采用这样的方式。实现这个模式有利于很轻松的创建出一个能被多个对象所调用的单例。

The Singleton pattern applies to situations in which there needs to be a single instance of a class. The most common example of this is a database connection. Implementing this pattern allows a programmer to make this single instance easily accessible by many other objects.

Example #2 Singleton Function

de><?php
class
Example
{
    
// Hold an instance of the class
    
private static $instance
; //静态私有的类实例
    
    
// A private constructor; prevents direct creation of object
    
private function __construct
()
     {
         echo
'I am constructed'
;
     }

    
// The singleton method
    
public static function singleton
()
     {
         if (!isset(
self::$instance
)) { //如果没有设置静态私有类实例,创建之
            
$c = __CLASS__
;   //获得类名称
            
self::$instance = new $c
;
         }

         return
self::$instance
;
     }
    
    
// Example method
    
public function bark
()
     {
         echo
'Woof!'
;
     }

    
// Prevent users to clone the instance
    
public function __clone
() //不允许被克隆
     {
        
trigger_error('Clone is not allowed.', E_USER_ERROR
);
     }

}

?>
关键词:
1 私有
de>de>静态de>de>成员变量
2
de>de>__CLASS__获取当前类名
3 公共静态方法获取单例
4 覆盖__clone()方法

----十个字:私有静态量,公共静态法--------
de>
  评论这张
 
阅读(212)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018