亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > 建站經驗 > 正文

如何理解PHP的工廠模式Factory Pattern

2024-04-25 20:36:13
字體:
來源:轉載
供稿:網友

工廠類就是一個專門用來創建其它對象的類,工廠類在多態性編程實踐中是非常重要的。它允許動態替換類,修改配置,會使應用程序更加靈活。掌握工廠模式對Web開發是必不可少的。

工廠模式通常用來返回類似接口的不同的類,工廠的一種常見用法就是創建多態的提供者。

通常工廠模式有一個關鍵的構造,即一般被命名為factory的靜態方法。這個靜態方法可以接受任意數量的參數,并且必須返回一個對象。

Program List:基本的工廠類

<?php

class Fruit {

// 對象從工廠類返回

}

Class FruitFactory {

public static function factory() {

// 返回對象的一個新實例

return new Fruit();

}

}

// 調用工廠

$instance = FruitFactory::factory();

?>

Program List:利用工廠類生產對象

<?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');

}

}

}

// Load a MySQL Driver

$mysql = Example::factory('MySQL');

// Load an SQLite Driver

$sqlite = Example::factory('SQLite');

?>

Program List:一個完整的工廠類

下面的程序定義了一個通用的工廠類,它生產能夠保存你所有操作的空對象,你可以獲得一個實例,這些操作都在那個實例中了。

<?php

/**

* Generic Factory class

* This Magic Factory will remember all operations you perform on it,

* and apply them to the object it instantiates.

*

*/

class FruitFactory {

private $history, $class, $constructor_args;

/**

* Create a factory of given class. Accepts extra arguments to be passed to

* class constructor.

*/

function __construct( $class ) {

$args = func_get_args();

$this->class = $class;

$this->constructor_args = array_slice( $args, 1 );

}

function __call( $method, $args ) {

$this->history[] = array(

'action' => 'call',

'method' => $method,

'args' => $args

);

}

function __set( $property, $value ) {

$this->history[] = array(

'action' => 'set',

'property' => $property,

'value' => $value

);

}

/**

* Creates an instance and performs all operations that were done on this MagicFactory

*/

function instance() {

# use Reflection to create a new instance, using the $args

$reflection_object = new ReflectionClass( $this->class );

$object = $reflection_object->newInstanceArgs( $this->constructor_args );

# Alternative method that doesn't use ReflectionClass, but doesn't support variable

# number of constructor parameters.

//$object = new $this->class();

# Repeat all remembered operations, apply to new object.

foreach( $this->history as $item ) {

if( $item['action'] == 'call' ) {

call_user_func_array( array( $object, $item['method'] ), $item['args'] );

}

if( $item['action'] == 'set' ) {

$object->{$item['property']} = $item['value'];

}

}

# Done

return $object;

}

}

class Fruit {

private $name, $color;

public $price;

function __construct( $name, $color ) {

$this->name = $name;

$this->color = $color;

}

function setName( $name ) {

$this->name = $name;

}

function introduce() {

print "Hello, this is an {$this->name} {$this->sirname}, its price is {$this->price} RMB.";

}

}

# Setup a factory

$fruit_factory = new FruitFactory('Fruit', 'Apple', 'Gonn');

$fruit_factory->setName('Apple');

$fruit_factory->price = 2;

# Get an instance

$apple = $fruit_factory->instance();

$apple->introduce();

?>

程序運行結果:

Hello, this is an Apple , its price is 2 RMB.
工廠模式主要是為創建對象提供過渡接口,以便將創建對象的具體過程屏蔽隔離起來,達到提高靈活性的目的。

工廠模式可以分為三類:

簡單工廠模式(Simple Factory)

工廠方法模式(Factory Method)

抽象工廠模式(Abstract Factory)

這三種模式從上到下逐步抽象,并且更具一般性。

簡單工廠模式又稱靜態工廠方法模式。重命名上就可以看出這個模式一定很簡單。它存在的目的很簡單:定義一個用于創建對象的接口。工廠方法模式去掉了簡單工廠模式中工廠方法的靜態屬性,使得它可以被子類繼承。這樣在簡單工廠模式里集中在工廠方法上的壓力可以由工廠方法模式里不同的工廠子類來分擔。

工廠方法模式仿佛已經很完美的對對象的創建進行了包裝,使得客戶程序中僅僅處理抽象產品角色提供的接口。那我們是否一定要在代碼中遍布工廠呢?大可不必。也許在下面情況下你可以考慮使用工廠方法模式:

當客戶程序不需要知道要使用對象的創建過程。
客戶程序使用的對象存在變動的可能,或者根本就不知道使用哪一個具體的對象。

 

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品一区二区三区三区| 国产97在线观看| 欧美在线中文字幕| 色妞一区二区三区| 国产欧美日韩视频| 日本免费久久高清视频| 久久精品免费播放| 亚洲视频在线观看视频| 成人黄色免费看| 中文字幕亚洲欧美一区二区三区| 欧美性色视频在线| 亚洲国产女人aaa毛片在线| 欧洲成人性视频| 亚洲精品在线不卡| 国产精品高清网站| 亚洲最大中文字幕| 国产精品男女猛烈高潮激情| 亚洲精品aⅴ中文字幕乱码| 51视频国产精品一区二区| 国产亚洲精品久久久| 日韩精品在线看| 欧美黑人一级爽快片淫片高清| 91日韩在线播放| 国内精品一区二区三区四区| 国产精品中文字幕在线观看| 久久精品91久久久久久再现| 亚洲第一精品自拍| 亚洲精品国产精品国自产在线| 国产精品女视频| 97婷婷大伊香蕉精品视频| 欧美黑人性视频| 欧美电影在线观看高清| 精品久久久国产精品999| 久久亚洲国产精品| 午夜精品久久久久久久99热浪潮| 成人激情视频网| 亚洲一区二区自拍| 综合久久五月天| 久久成人精品视频| 色偷偷av一区二区三区乱| 欧美理论电影在线播放| 亚洲免费视频在线观看| 欧美日韩美女在线观看| 国产精品99久久久久久久久久久久| 91av网站在线播放| 国产精品老牛影院在线观看| 美日韩在线视频| 日韩av免费看| 国产精品福利久久久| 国产成人精品一区| 91九色蝌蚪国产| 色香阁99久久精品久久久| 日韩欧美成人区| 亚洲白拍色综合图区| 97在线看福利| 国产高清视频一区三区| 国产精品看片资源| 亚洲男人第一网站| 国产一区二区免费| 亚洲电影免费观看高清完整版在线| 亚洲精选在线观看| 久久精品国产2020观看福利| 国产精品成人aaaaa网站| 久久久久久久国产精品视频| 综合av色偷偷网| 欧美亚洲成人精品| 亚洲人在线观看| 欧美极品在线播放| 欧美日韩999| 欧美亚洲在线视频| 日韩av色综合| 91成人免费观看网站| 海角国产乱辈乱精品视频| 久久网福利资源网站| 992tv成人免费视频| 国产精品一区二区电影| 亚洲视频第一页| 成人国产亚洲精品a区天堂华泰| 欧美电影免费观看电视剧大全| 成人淫片在线看| 久久久999国产精品| 亚洲欧美激情精品一区二区| 欧美高清性猛交| 国产丝袜视频一区| 欧美在线影院在线视频| 欧美中在线观看| 在线观看中文字幕亚洲| 色综合色综合久久综合频道88| 992tv在线成人免费观看| 日韩av最新在线| 国产精品永久免费观看| 自拍视频国产精品| 中文字幕国产精品久久| 精品久久久久久久久久久久久久| 国内精品久久久久影院 日本资源| 国产一区二区美女视频| 欧美精品videossex性护士| 不卡在线观看电视剧完整版| 色偷偷偷综合中文字幕;dd| 欧美一区二区三区艳史| 中文字幕自拍vr一区二区三区| 九九热99久久久国产盗摄| 影音先锋欧美精品| 免费99精品国产自在在线| 欧美亚洲国产日本| 亚洲成人黄色在线观看| 色综合久综合久久综合久鬼88| xvideos亚洲| 精品久久久一区二区| 韩日精品中文字幕| 91精品久久久久久久久久| 91精品久久久久久综合乱菊| 亚洲情综合五月天| 国产成人精品在线播放| 欧美日韩国内自拍| 国产精品啪视频| 亚洲男人的天堂网站| 一道本无吗dⅴd在线播放一区| 最近2019中文字幕在线高清| 欧美激情免费视频| 国产成人精品在线视频| 欧美在线视频免费| 欧美情侣性视频| 色噜噜国产精品视频一区二区| 国产成人精品一区| 欧美成人免费在线观看| 91精品视频一区| 国产精品18久久久久久麻辣| 国产一区二区三区欧美| 久久成人18免费网站| 在线观看不卡av| 国产欧美日韩中文| 欧美裸体视频网站| 亚洲第一区中文99精品| 精品国产91久久久久久老师| 久久久噜久噜久久综合| 国产97在线亚洲| 日本国产欧美一区二区三区| 日韩欧美福利视频| 欧美激情videos| 乱亲女秽乱长久久久| 欧美日韩国产精品| 亚洲欧洲av一区二区| 国产欧美日韩丝袜精品一区| 欧美日韩性生活视频| 亚洲色图五月天| 亚洲精品少妇网址| 97欧美精品一区二区三区| 亚洲精品女av网站| 久热精品在线视频| 91香蕉亚洲精品| 精品国产网站地址| 久久人人爽人人| 亚洲精品国产美女| 久久人人爽人人爽人人片av高清| 亚洲色图偷窥自拍| 另类美女黄大片| 奇米四色中文综合久久| 91成人精品网站| 国产欧美一区二区三区久久| 91伊人影院在线播放| 精品综合久久久久久97| 丝袜美腿亚洲一区二区| 尤物九九久久国产精品的特点|