本文實例講述了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程序設計有所幫助。