PHP模式設計

一、單例模式

所有單例類至少擁有以下三個公共元素:

1、必須擁有一個構造函數,並且必須被標記爲private

2、擁有一個保存類的實例的靜態成員變量

3、擁有一個訪問這個實例的公共靜態方法

注意:與普通類不同的是,單例類不能在其他類中直接實例化,單例類只能被其自身實例化,要獲得這種限制效果,__construct()方法被標記爲private

代碼舉例實現:

<?php
/**
* 單例模式的使用
*/
class Database{
private $_db;
static $_instance;
private function __construct(){
$this->_db = pg_connect('dbname=example');
}
//防止對象被克隆或者複製
private __clone(){}
//對SingleMode的實例進行訪問,這個方法會返回對這個$_instance的引用
public static function getInstance(){
if( !(self:$_instance instanceof self) ){
self:$_instance = new self();
}
return self:$_instance;
}
//共有的方法查詢數據
public function query($sql){
//使用$this->_db執行一個查詢
return pg_query($this->_db,$sql);
}
}
//使用單例類的做法
$db = Database::getInstance();//通過調用getInstance()方法,$db現在存有內部存儲實例的引用
$db->query("sql 語句");
?>

二、工廠模式

包含了一個專門用來創建其他對象方法的類,工廠類在多態性編程實踐中至關重要,它允許動態地替換類,修改配置,並且通常會使應用程序更加靈活。

用於數據庫的移植當面分廠方便,根據數據庫的不同創建不同的對象

代碼實現如下;

<?php
/**
* 工廠模式的使用
*/
interface IImage{
function getWidth();
function getHeight();
}
class Image_PNG implements IImage{
private $_width =10,$_height=20;
public function __construct(){}
public function getWidth(){
echo "Image_PNG Width:".$this->_width;
}
public function getHeight(){
echo "Image_PNG Height:".$this->_height;
}
}
class Image_JPEG implements IImage{
private $_width =100,$_height=200;
public function __construct(){}
public function getWidth(){
echo "Image_JPEG Width:".$this->_width;
}
public function getHeight(){
echo "Image_JPEG Height:".$this->_height;
}
}
class ImageFactory{
public static function factory($file){
switch($file){
case 'png':
$ret = new Image_PNG();
break;
case 'jpeg':
$ret = new Image_JPEG();
break;
}
if($ret instanceof IImage){
return $ret;
}
}
}
$image = ImageFactory::factory('jpeg');
$image->getHeight();
$image->getWidth();
?>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章