四虎精品视频-四虎精品成人免费网站-四虎黄色网-四虎国产视频-国产免费91-国产蜜臀97一区二区三区

PHP 工廠模式使用方法

基本的工廠類
復(fù)制代碼 代碼如下:
class MyObject{
//對象將從工廠返回
}
class MyFactory{
public static function factory(){
return new MyObject():
}
}
$instance=MyFactory::factory();

使用工廠類解析圖像文件
復(fù)制代碼 代碼如下:
<?php
interface IImage{
function getHeight();
function getWidth();
function getData();
}
class Image_PNG implements IImage{
private $_width,$_height,$_data;
public function __construct($file){
$this->_file=$file;
$this->_parse();
}
private function _parse(){
//完成PNG格式的解析工作
//并填充$_width,$_height,$_data;
}
public function getWidth(){
return $this->_width;
}
public function getHeight(){
return $this->_height;
}
public function getData(){
return $this->_data;
}
}
class Image_JPEG implements IImage{
private $_width,$_height,$_data;
public function __construct($file){
$this->_file=$file;
$this->_parse();
}
private function _parse(){
//完成JPEG格式的解析工作
//并填充$_width,$_height,$_data;
}
public function getWidth(){
return $this->_width;
}
public function getHeight(){
return $this->_height;
}
public function getData(){
return $this->_data;
}
}
class ImageFactory{
public static function factory($file){
$pathParts=pathinfo($file);
switch (strtolower($pathParts['extension']))
{
case 'jpg':
$ret=new Image_JPEG($file);
break;
case 'png':
$ret=new Image_PNG($file);
break;
default:
//有問題
}
if($ret instanceof IImage){
return $ret;
}else {
//有問題
}
}
}
//當(dāng)使用圖像文件名調(diào)用 工廠方法時,根據(jù)傳入的文件類型不同,取得不同對象。
//調(diào)用ImageFactoyr
$image=ImageFactory::factory('/path/to/my.jpg');
//$image是Image_JPEG類的一個實例
echo $image->getWidth();

使用工廠類解決數(shù)據(jù)庫可移值性問題
在數(shù)據(jù)庫應(yīng)用程序中,工廠模式可以在以下兩個方面起作用。
.使軟件更容易支持各種不同的數(shù)據(jù)庫平臺,用于擴展用戶群
.如果軟件是內(nèi)部使用,需要修改數(shù)據(jù)庫時,可以容易將應(yīng)用程序移值到別一個平臺
在代碼中,創(chuàng)建了一個名為User的數(shù)據(jù)庫表來測試它,這個表定義一個名為email的varchar類型字段
復(fù)制代碼 代碼如下:
<?php
interface IDatabaseBindings{
public function userExists($email);
}
class PGSQL implements IDatabaseBindings{
protected $_connection;
public function __construct(){
$this->_connection=pg_connect('dbname=example_db');
}
public function userExists($email){
$emailEscaped=pg_escape_string($email);
$query="select 1 from users where email='".$emailEscaped."'";
if($result=pg_query($query,$this->_connection)){
return (pg_num_rows($result)>0)?true:false;
}else{
return false;
}
}
}
class MYSQL implements IDatabaseBindings{
protected $_connection;
public function __construct(){
$this->_connection=mysql_connect('localhost');
mysql_select_db('example_db',$this->_connection);
}
public function userExists($email){
$emailEscaped=mysql_real_escape_string($email);
$query="select 1 from users where email='".$emailEscaped."'";
if($result=mysql_query($query,$this->_connection)){
return (mysql_num_rows($result)>0)?true:false;
}else{
return false;
}
}
}
class DatabaseFactory{
public static function factory(){
$type=loadtypefromconfigfile();
switch ($type){
case 'PGSQL':
return new PGSQL();
break;
case 'MYSQL':
return new MYSQL();
break;
}
}
}

應(yīng)用程序不必知道它與何種類型的數(shù)據(jù)庫連接,只會基于IDatabaseBindings接口定義的規(guī)則直接與工廠返回的實例打交道。
復(fù)制代碼 代碼如下:
//調(diào)用DatabaseFactoy
$db=DatabaseFactory::factory();
$db->userExists('person@example.com');

php技術(shù)PHP 工廠模式使用方法,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 宇宙刑事卡邦| 蚊子海岸| 一问倾城| 越活越来劲 电视剧| 教师政治学习笔记| 帕兰妮·琳帕缇雅空| 小学生手工玫瑰花| 神仙我才不稀罕短剧在线观看| 神州第一刀电影免费观看| 尚大庆| 《电业安全工作规程》电力线路| 天上人间电影| 所求皆所愿| 肢体的诱惑电影| 少年派二电视剧免费观看完整版| 龙虎少年队2| 张猛龙魏碑字帖大全| 杨子纯| 任喜宝| 女生摸女生的胸| midjourney中文版| 死亡繁殖| 思念天边的你简谱| 欧美日韩欧美| 俺去也电影网| 欲情电影在线看| 老司机免费视频在线观看| 13名妓| 尸家重地演员表| 艺术影院| 女生宿舍2在线| 玉林电视台| 黄色网址视频| 加藤视频下载| 《我的美女老板》电视剧| 假男假女 电影| 天国恩仇| 爱欲告白| 快播电影网怡红院| 纵横欲海| 基础设施建设产业市场|