欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > PHP設計模式之工廠模式(Factory Pattern)的講解

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

熱門標簽:抖音有個地圖標注是什么意思 保定crm外呼系統運營商 西區企業怎么做地圖標注入駐 智能電話機器人排名前十名南京 阿里云400電話申請加工單 地下城堡2圖九地圖標注 九江外呼系統 海南人工外呼系統有效果嗎 七魚外呼系統停用嗎

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

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

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

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

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

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

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

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

基本的工廠類:

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

利用工廠類生產對象:

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

一個完整的工廠類:

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

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

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

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

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

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

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

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關內容請查看下面相關鏈接

您可能感興趣的文章:
  • PHP設計模式(九)外觀模式Facade實例詳解【結構型】
  • PHP設計模式之外觀模式(Facade)入門與應用詳解
  • thinkphp5.1框架中容器(Container)和門面(Facade)的實現方法分析
  • 詳解PHP中的外觀模式facade pattern
  • 學習php設計模式 php實現門面模式(Facade)
  • php設計模式 Facade(外觀模式)
  • PHP設計模式之PHP迭代器模式講解
  • 淺談PHP設計模式之門面模式Facade

標簽:梅河口 韶關 甘肅 九江 涼山 遼陽 昭通 十堰

巨人網絡通訊聲明:本文標題《PHP設計模式之工廠模式(Factory Pattern)的講解》,本文關鍵詞  PHP,設計模式,之,工廠,模式,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PHP設計模式之工廠模式(Factory Pattern)的講解》相關的同類信息!
  • 本頁收集關于PHP設計模式之工廠模式(Factory Pattern)的講解的相關信息資訊供網民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    夜夜嗨av一区二区三区| 日韩成人av影院| 人妻互换一区二区激情偷拍| 欧美成人aa大片| 婷婷久久综合九色综合伊人色| av地址在线观看| 欧美色视频一区| 亚洲一区精品在线| 少妇熟女视频一区二区三区| 欧美男男青年gay1069videost| 亚洲一区欧美一区| 亚洲欧洲日产国码二区| 国产精品77777竹菊影视小说| 91麻豆制片厂| 中文字幕va一区二区三区| 国产成人99久久亚洲综合精品| 女同久久另类69精品国产| 国产欧美日韩在线| 成人激情免费视频| 在线区一区二视频| 亚洲一区二区美女| 玖玖爱在线精品视频| 日韩丝袜情趣美女图片| 久久99久久久欧美国产| 欧美另类69xxxx| 国产精品电影一区二区| 99久久久久久| 欧美日韩国产123区| 日韩精品一卡二卡三卡四卡无卡| 亚洲欧美怡红院| 一边摸一边做爽的视频17国产 | 日韩精品一区二区三区视频播放 | 朝桐光av一区二区三区| 日韩视频免费直播| 久久99精品久久只有精品| 手机av在线不卡| 亚洲欧洲精品一区二区三区| 91蜜桃免费观看视频| 欧美一区午夜精品| 激情文学综合丁香| 色综合天天在线| 亚洲国产综合色| 成人精品999| 中文字幕 久热精品 视频在线| 99在线视频精品| 欧美一级欧美一级在线播放| 国产最新精品精品你懂的| 国产十六处破外女视频| 亚洲电影第三页| 懂色av蜜桃av| 亚洲黄色性网站| 九色porny自拍视频| 国产精品久久久久影院老司| 美国黄色一级视频| 久久日一线二线三线suv| av中文一区二区三区| 欧美一级精品大片| 国产成人精品免费| 7777精品伊人久久久大香线蕉 | 亚洲国产美女搞黄色| 精品少妇一区二区三区免费观| 国产精品污污网站在线观看| 中文字幕第九页| 欧美激情在线一区二区| 麻豆短视频在线观看| 国产无一区二区| 国产精九九网站漫画| 久久精品男人天堂av| 91免费视频观看| 久久蜜桃av一区精品变态类天堂 | 久久久久亚洲av无码专区首jn| 精品久久久久久久人人人人传媒| 成人av中文字幕| 欧美变态tickle挠乳网站| av一区二区三区| 精品日本一线二线三线不卡| 91蜜桃在线免费视频| 久久久www成人免费毛片麻豆| 日本中文字幕有码| 国产精品麻豆网站| 成人免费网站黄| 亚洲一区二区视频在线| 日本爱爱小视频| 美女性感视频久久| 欧美日韩在线播放一区| 国产91对白在线观看九色| 欧美大片在线观看| 波兰性xxxxx极品hd| 亚洲国产精品人人做人人爽| 黑人狂躁日本娇小| 久久99精品久久只有精品| 欧美精品日韩一区| av在线一区二区| 欧美国产日韩精品免费观看| 无码人妻精品一区二区三区温州| 亚洲黄色免费网站| 精品国产欧美日韩不卡在线观看| 精品一区二区三区在线观看国产| 欧美日本在线播放| 97精品久久久午夜一区二区三区| 国产日韩精品一区| av直播在线观看| 亚洲国产日日夜夜| 在线观看91精品国产入口| 风间由美中文字幕在线看视频国产欧美| 欧美刺激午夜性久久久久久久| 亚洲av无码专区在线播放中文| 亚洲色图欧美激情| 日韩激情小视频| 国产精品一卡二卡在线观看| 精品国产麻豆免费人成网站| 日本japanese极品少妇| 午夜精品一区在线观看| 欧美日韩国产小视频| 永久看看免费大片| 一区二区三区在线免费| 色婷婷综合久久| 粉嫩av一区二区三区在线播放| 国产人成一区二区三区影院| 人成免费在线视频| 国产尤物一区二区在线| 久久久久久黄色| 欧美激情久久久久久久| 狠狠久久亚洲欧美| 国产亚洲一本大道中文在线| 一级特黄曰皮片视频| 国内外成人在线| 久久精品一区二区三区四区| 欧美成人另类视频| 国产一区二区三区不卡在线观看| 久久久国产精华| 国产乱子轮xxx农村| 国产成人av一区二区三区在线 | 成人无码av片在线观看| 黄页视频在线91| 久久精品在线观看| 在线免费看av网站| 成人av网站免费观看| 亚洲蜜桃精久久久久久久| 欧美午夜视频网站| 白嫩情侣偷拍呻吟刺激| 日本欧美一区二区在线观看| 精品成人a区在线观看| 国产福利在线导航| 福利视频网站一区二区三区| 亚洲视频网在线直播| 在线观看日韩高清av| 麻豆av免费看| 免费精品99久久国产综合精品| 精品国产一区二区三区久久久蜜月 | av一区二区不卡| 亚洲小说春色综合另类电影| 日韩欧美自拍偷拍| 日韩欧美视频免费观看| jizz一区二区| 亚洲成人综合网站| 精品国产亚洲在线| 欧美另类videoxo高潮| 91丨porny丨蝌蚪视频| 丝袜美腿亚洲一区| 久久久无码精品亚洲日韩按摩| 国产精品白丝喷水在线观看| 中文字幕1区2区| 久久激五月天综合精品| 国产精品久久久久久久久搜平片| 欧美性三三影院| 国产精品无码一区二区三区免费| 国产精品一区一区三区| 亚洲黄色免费电影| 亚洲色偷偷色噜噜狠狠99网| 蜜桃av噜噜一区| 亚洲欧洲av色图| 欧美精品久久天天躁| 奇米网一区二区| 美女流白浆视频| 精品一区二区三区蜜桃| 亚洲人一二三区| 日韩欧美成人午夜| 国产精品 欧美激情| av2014天堂网| 粉嫩aⅴ一区二区三区四区五区| 亚洲国产乱码最新视频| 国产欧美精品日韩区二区麻豆天美| 欧美在线|欧美| 久久丫精品忘忧草西安产品| 99精品视频一区二区| 久久爱另类一区二区小说| 亚洲欧美日韩国产综合在线| 欧美r级在线观看| 日本高清无吗v一区| 四虎国产精品成人免费入口| 91视频国产资源| 国产九九视频一区二区三区| 亚洲gay无套男同| 国产精品的网站| 欧美电影免费观看高清完整版在线观看| 日韩一区二区三区四区在线| 中文精品在线观看| 能看毛片的网站| 粉嫩aⅴ一区二区三区四区|