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

首頁 > 語言 > PHP > 正文

PHP設計模式之工廠模式(Factory Pattern)的講解

2024-05-05 00:07:41
字體:
來源:轉載
供稿:網友

面向對象編程中,工廠模式是我們最常用的實例化對象模式,工廠類就是一個專門用來創建其它對象的類,工廠類在多態性編程實踐中是非常重要的。它允許動態替換類,修改配置,會使應用程序更加靈活。掌握工廠模式對Web開發是必不可少的,它會給你的系統帶來更大的可擴展性和盡量少的修改量。

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

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

一個非常貼近生活的例子來告訴你什么是工廠模式

但是工廠模式真的是個累贅嗎?其實并不是!他能夠作為一種設計模式流傳至今,一定是有他的道理的!只不過我們看到的例子只能說明工廠模式是什么,并不能很好說明工廠模式的優點,所以我們學會后并不知道為什么要使用工廠模式,以及什么時候應該去使用工廠模式!

其實工廠模式在我們的現實生活中非常常見,下面我舉個生活中的例子,大家應該就能明白工廠模式的用處在哪里了!

麥當勞大家都吃過吧?我們去點餐的時候,我們可以點一個漢堡,一杯可樂,一個薯條。我們還可以點一杯可樂,一個薯條。點完之后點餐員會問我們一句還要別的嗎?你說不要了! 然后你的這一份餐就點完了,可以給錢了。咦,我們發現這是一個建造者模式(Builder Pattern)??!

(ps:這確實是突然發現的,之前寫建造者模式那篇文章的時候并沒有想到這個例子)

基本的工廠類:

<?php class Fruit { // 對象從工廠類返回 } Class FruitFactory { public static function factory() {  // 返回對象的一個新實例  return new Fruit(); } } // 調用工廠 $instance = FruitFactory::factory();?>

利用工廠類生產對象:

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

一個完整的工廠類:

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

<?php  /**   * Generic Factory class   * This 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();?>

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

工廠模式可以分為三類:

  • 簡單工廠模式(Simple Factory)
  • 工廠方法模式(Factory Method)
  • 抽象工廠模式(Abstract Factory)

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

簡單工廠模式又稱靜態工廠方法模式;從命名上就可以看出這個模式一定很簡單。它存在的目的很簡單:定義一個用于創建對象的接口。

工廠方法模式去掉了簡單工廠模式中工廠方法的靜態屬性,使得它可以被子類繼承。這樣在簡單工廠模式里集中在工廠方法上的壓力可以由工廠方法模式里不同的工廠子類來分擔。

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

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

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产视频精品一区二区三区| 久久久久久国产精品美女| 日韩一区在线视频| 亚洲网站在线观看| 爽爽爽爽爽爽爽成人免费观看| 91亚洲精品久久久| 中文字幕国产日韩| 久久久噜噜噜久噜久久| 亚洲欧美激情在线视频| 久久综合久久88| 久久久精品一区二区三区| 黑人巨大精品欧美一区二区一视频| 国产精品精品视频一区二区三区| 亚洲精品视频播放| 在线电影av不卡网址| 久久精品视频在线| 色综合久久88| 国产一区二区三区在线免费观看| 欧美国产日韩二区| 国产成人激情小视频| 岛国av一区二区三区| 国内精品小视频在线观看| 久久久精品一区二区三区| 国语自产精品视频在线看抢先版图片| 免费99精品国产自在在线| 青青a在线精品免费观看| 日韩中文字在线| 色婷婷综合久久久久| 国产欧美一区二区白浆黑人| 亚洲欧洲高清在线| 91综合免费在线| 国产在线视频不卡| 国产精品扒开腿做爽爽爽男男| 性色av香蕉一区二区| 美女扒开尿口让男人操亚洲视频网站| 超碰日本道色综合久久综合| 久久理论片午夜琪琪电影网| 久久久久久久久久亚洲| 欧洲精品久久久| 亚洲日韩欧美视频一区| 欧美色播在线播放| 日韩欧美在线播放| 亚洲国产欧美一区二区三区久久| 亚洲精品av在线| 亚洲国产美女精品久久久久∴| 欧美刺激性大交免费视频| 欧美性videos高清精品| 日韩中文字幕av| 精品欧美aⅴ在线网站| 第一福利永久视频精品| 成人精品视频久久久久| 久久精品夜夜夜夜夜久久| 亚洲色图第一页| 色悠悠国产精品| 欧美—级a级欧美特级ar全黄| 国产mv免费观看入口亚洲| 精品久久久久久久久久久久久| 亚洲第一页自拍| 欧美激情一区二区三区在线视频观看| 欧美激情在线观看视频| 午夜精品福利在线观看| 精品福利在线看| 岛国av在线不卡| 亚洲精品国产成人| 91久久精品日日躁夜夜躁国产| 亚洲精品视频二区| 日本三级久久久| 欧美性色xo影院| 欧美日韩一区二区在线| 色视频www在线播放国产成人| 久久亚洲春色中文字幕| 日韩电影视频免费| 精品中文字幕在线| 精品视频久久久久久| 亚洲福利视频久久| 亚洲欧美制服第一页| 欧美做受高潮电影o| 欧美一级黑人aaaaaaa做受| 一区二区三区 在线观看视| 久久久精品视频在线观看| 国产精品偷伦一区二区| 欧美激情欧美激情| 55夜色66夜色国产精品视频| 国语自产在线不卡| 一本色道久久88精品综合| 97超级碰碰人国产在线观看| 欧美日韩中文在线| 日韩在线欧美在线国产在线| 国内精品久久久久影院 日本资源| 日韩视频―中文字幕| 美女啪啪无遮挡免费久久网站| 狠狠综合久久av一区二区小说| 国产精品va在线播放我和闺蜜| 日韩精品在线视频观看| 日本在线精品视频| 国产精品看片资源| 91免费观看网站| 日韩精品在线视频观看| 久久久噜噜噜久久中文字免| 日韩中文字幕av| 亚洲精品午夜精品| 国产精品福利观看| 久久亚洲电影天堂| 精品久久久久久久久久久久| 精品国内自产拍在线观看| 亚洲国产欧美一区二区三区同亚洲| 国产精品精品一区二区三区午夜版| 色综合久综合久久综合久鬼88| 亚洲a一级视频| 欧美日韩激情小视频| 亚洲第一福利网站| 亚洲午夜精品久久久久久久久久久久| 国产精品∨欧美精品v日韩精品| 欧美日韩福利电影| 亚洲一区二区三区sesese| 成人激情春色网| 国模精品视频一区二区三区| 成人亲热视频网站| 国产精品香蕉av| 国产欧美日韩丝袜精品一区| 国产综合香蕉五月婷在线| 日韩av色在线| 国产精品自产拍在线观看中文| 久久69精品久久久久久国产越南| 亚洲网站在线看| 亚洲www视频| 国产欧美一区二区三区视频| 成人信息集中地欧美| 亚洲综合色激情五月| 日韩av免费在线播放| 精品免费在线视频| 成人深夜直播免费观看| 成人黄色片在线| 久久久久成人网| 欧美精品亚州精品| 久久人人爽人人| 国产xxx69麻豆国语对白| 中文字幕av一区二区| 亚洲国产成人在线播放| 日本中文字幕成人| 国产精品久久一区| 色偷偷亚洲男人天堂| 国产精品久久久999| 国产mv久久久| 国产日韩在线一区| 国产精品尤物福利片在线观看| 国产精品视频内| 少妇高潮 亚洲精品| 久久久精品国产网站| 国产精品日韩在线| 国产精品久久久| 久久久久久久一区二区| 91精品国产91久久久久久| 欧美日韩国产一区二区三区| 日韩www在线| 精品国产成人在线| 91手机视频在线观看| 亚洲成人久久久| 久久久久久亚洲精品| 精品成人在线视频| 久久久这里只有精品视频| 久久久999精品视频| 啪一啪鲁一鲁2019在线视频| 久久最新资源网|