本文實例講述了PHP設計模式之工廠方法設計模式。分享給大家供大家參考,具體如下:
一、什么是工廠方法模式
作為一種創建型設計模式,工廠方法模式就是要創建“某種東西”。對于工廠方法,要創建的“東西”是一個產品,這個產品與創建它的類之間不存在綁定。實際上,為了保持這種松耦合,客戶會通過一個工廠發出請求,再由工廠創建所請求的產品。利用工廠方法模式,請求者只發出請求,而不具體創建產品。
二、什么時候使用工廠方法模式
如果實例化對象的子類可能改變,就要使用工廠方法模式。
三、一般工廠方法模式
使用一般工廠方法模式時,客戶只包含工廠的引用,一個工廠生產一種產品。增加一種產品的同時需要增加一個新工廠類和一個新產品類。
<?php/*** 一般工廠方法設計模式**///工廠抽象類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();/*運行結果:此處為文本此處為圖像*/?>
四、參數化工廠方法模式
使用參數化工廠方法模式時,客戶包含工廠和產品的引用,發出請求時需要指定產品的種類,一個工廠生產多種產品。增加一種產品時只需要增加一個新產品類即可。
<?php/*** 參數化工廠方法設計模式**///工廠抽象類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程序設計有所幫助。
新聞熱點
疑難解答
圖片精選