這次給大家帶來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單例模式使用案例詳解