天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

PHP 工廠模式使用方法

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

使用工廠類(lèi)解析圖像文件
復(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:
//有問(wèn)題
}
if($ret instanceof IImage){
return $ret;
}else {
//有問(wèn)題
}
}
}
//當(dāng)使用圖像文件名調(diào)用 工廠方法時(shí),根據(jù)傳入的文件類(lèi)型不同,取得不同對(duì)象。
//調(diào)用ImageFactoyr
$image=ImageFactory::factory('/path/to/my.jpg');
//$image是Image_JPEG類(lèi)的一個(gè)實(shí)例
echo $image->getWidth();

使用工廠類(lèi)解決數(shù)據(jù)庫(kù)可移值性問(wèn)題
在數(shù)據(jù)庫(kù)應(yīng)用程序中,工廠模式可以在以下兩個(gè)方面起作用。
.使軟件更容易支持各種不同的數(shù)據(jù)庫(kù)平臺(tái),用于擴(kuò)展用戶群
.如果軟件是內(nèi)部使用,需要修改數(shù)據(jù)庫(kù)時(shí),可以容易將應(yīng)用程序移值到別一個(gè)平臺(tái)
在代碼中,創(chuàng)建了一個(gè)名為User的數(shù)據(jù)庫(kù)表來(lái)測(cè)試它,這個(gè)表定義一個(gè)名為email的varchar類(lèi)型字段
復(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)用程序不必知道它與何種類(lèi)型的數(shù)據(jù)庫(kù)連接,只會(huì)基于IDatabaseBindings接口定義的規(guī)則直接與工廠返回的實(shí)例打交道。
復(fù)制代碼 代碼如下:
//調(diào)用DatabaseFactoy
$db=DatabaseFactory::factory();
$db->userExists('person@example.com');

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

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

主站蜘蛛池模板: 亚洲大码熟女在线 | 性按摩AAAAAAA片 | 在线播放成人无码日 | 亚洲精品视频免费 | 国产精品自在自线亚洲 | 国产精品一区二区三区四区五区 | 一区二区乱子伦在线播放 | 国产传媒在线播放 | 香蕉久久av一区二区三区 | 芒果视频看片在线观看 | 啪啪漫画无遮挡全彩h同人 啪啪激情婷婷久久婷婷色五月 | 香港日本三级亚洲三级 | 他揉捏她两乳不停呻吟口述 | 香蕉久久av一区二区三区 | 同桌上课把奶露出来给我玩 | 亚洲大爷操 | 美女逼逼毛茸茸 | 国产亚洲欧美日韩综合综合二区 | 精品国产乱码久久久久久软件 | 久久高清一级毛片 | 好男人资源免费观看1 | 甜性涩爱快播 | 暖暖高清视频免费 | a视频免费在线 | 久久青青草原综合伊人 | 污污又黄又爽免费的网站 | 名女躁b久久天天躁 | 再深点灬舒服灬太大了在线视频 | 色情www日本欧美 | 2022年国产精品久久久久 | 伊人热人久久中文字幕 | 精品欧美小视频在线观看 | 亚洲薄码区| 99久久精品免费看国产免费 | 久久精品国产免费播高清无卡 | 又黄又湿免费高清视频 | 嫩草伊人久久精品少妇AV网站 | 18 japanese宾馆直播 | 久久WWW免费人成一看片 | 一一本之道高清视频在线观看中文字幕 | 好硬好湿好爽再深一点视频 |