PHPFactory 方法設計模式案例詳解

來源:互聯網
上載者:User
這次給大家帶來PHPFactory 方法設計模式案例詳解,PHPFactory 方法設計模式案使用的注意事項有哪些,下面就是實戰案例,一起來看一下。

一、什麼是Factory 方法模式

作為一種建立型設計模式,Factory 方法模式就是要建立“某種東西”。對於Factory 方法,要建立的“東西”是一個產品,這個產品與建立它的類之間不存在綁定。實際上,為了保持這種松耦合,客戶會通過一個工廠發出請求,再由工廠建立所請求的產品。利用Factory 方法模式,要求者只發出請求,而不具體建立產品。

二、什麼時候使用Factory 方法模式

如果執行個體化對象的子類可能改變,就要使用Factory 方法模式。

三、一般Factory 方法模式

使用一般Factory 方法模式時,客戶只包含工廠的引用,一個工廠生產一種產品。增加一種產品的同時需要增加一個新工廠類和一個新產品類。

<?php/***  一般Factory 方法設計模式**///工廠抽象類別abstract class Factory{  protected abstract function produce();  public function startFactory()  {    $pro = $this->produce();    return $pro;  }}//文本工廠class TextFactory extends Factory{  protected function produce()  {    $textProduct = new TextProduct();    return $textProduct->getProperties();  }}//映像工廠class ImageFactory extends Factory{  protected function produce()  {    $imageProduct = new ImageProduct();    return $imageProduct->getProperties();  }}//產品類介面interface Product{  public function getProperties();}//文本產品class TextProduct implements Product{  private $text;  function getProperties()  {    $this->text = "此處為文本";    return $this->text;  }}//映像產品class ImageProduct implements Product{  private $image;  function getProperties()  {    $this->image = "此處為映像";    return $this->image;  }}//客戶類class Client{  private $textFactory;  private $imageFactory;  public function construct()  {    $this->textFactory = new TextFactory();    echo $this->textFactory->startFactory() . '<br />';    $this->imageFactory = new ImageFactory();    echo $this->imageFactory->startFactory() . '<br />';  }}$client = new Client();/*運行結果:此處為文本此處為映像*/?>

四、參數化Factory 方法模式

使用參數化Factory 方法模式時,客戶包含工廠和產品的引用,發出請求時需要指定產品的種類,一個工廠生產多種產品。增加一種產品時只需要增加一個新產品類即可。

<?php/***  參數化Factory 方法設計模式**///工廠抽象類別abstract class Factory{  protected abstract function produce(Product $product);  public function startFactory(Product $product)  {    $pro = $this->produce($product);    return $pro;  }}//工廠實現class ConcreteFactory extends Factory{  protected function produce(Product $product)  {    return $product->getProperties();  }}//產品類介面interface Product{  public function getProperties();}//文本產品class TextProduct implements Product{  private $text;  public function getProperties()  {    $this->text = "此處為文本";    return $this->text;  }}//映像產品class ImageProduct implements Product{  private $image;  public function getProperties()  {    $this->image = "此處為映像";    return $this->image;  }}//客戶類class Client{  private $factory;  private $textProduct;  private $imageProduct;  public function construct()  {    $factory = new ConcreteFactory();    $textProduct = new TextProduct();    $imageProduct = new ImageProduct();    echo $factory->startFactory($textProduct) . '<br />';    echo $factory->startFactory($imageProduct) . '<br />';  }}$client = new Client();/*運行結果:此處為文本此處為映像*/?>

相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!

推薦閱讀:

PHP做出分享圖片功能

PHP單例模式使用案例詳解

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.