您好,登錄后才能下訂單哦!
小編給大家分享一下PHP設(shè)計(jì)模式之工廠(chǎng)方法設(shè)計(jì)模式的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
一、什么是工廠(chǎng)方法模式
作為一種創(chuàng)建型設(shè)計(jì)模式,工廠(chǎng)方法模式就是要?jiǎng)?chuàng)建“某種東西”。對(duì)于工廠(chǎng)方法,要?jiǎng)?chuàng)建的“東西”是一個(gè)產(chǎn)品,這個(gè)產(chǎn)品與創(chuàng)建它的類(lèi)之間不存在綁定。實(shí)際上,為了保持這種松耦合,客戶(hù)會(huì)通過(guò)一個(gè)工廠(chǎng)發(fā)出請(qǐng)求,再由工廠(chǎng)創(chuàng)建所請(qǐng)求的產(chǎn)品。利用工廠(chǎng)方法模式,請(qǐng)求者只發(fā)出請(qǐng)求,而不具體創(chuàng)建產(chǎn)品。
二、什么時(shí)候使用工廠(chǎng)方法模式
如果實(shí)例化對(duì)象的子類(lèi)可能改變,就要使用工廠(chǎng)方法模式。
三、一般工廠(chǎng)方法模式
使用一般工廠(chǎng)方法模式時(shí),客戶(hù)只包含工廠(chǎng)的引用,一個(gè)工廠(chǎng)生產(chǎn)一種產(chǎn)品。增加一種產(chǎn)品的同時(shí)需要增加一個(gè)新工廠(chǎng)類(lèi)和一個(gè)新產(chǎn)品類(lèi)。
<?php /** * 一般工廠(chǎng)方法設(shè)計(jì)模式 **/ //工廠(chǎng)抽象類(lèi) abstract class Factory { protected abstract function produce(); public function startFactory() { $pro = $this->produce(); return $pro; } } //文本工廠(chǎng) class TextFactory extends Factory { protected function produce() { $textProduct = new TextProduct(); return $textProduct->getProperties(); } } //圖像工廠(chǎng) class ImageFactory extends Factory { protected function produce() { $imageProduct = new ImageProduct(); return $imageProduct->getProperties(); } } //產(chǎn)品類(lèi)接口 interface Product { public function getProperties(); } //文本產(chǎn)品 class TextProduct implements Product { private $text; function getProperties() { $this->text = "此處為文本"; return $this->text; } } //圖像產(chǎn)品 class ImageProduct implements Product { private $image; function getProperties() { $this->image = "此處為圖像"; return $this->image; } } //客戶(hù)類(lèi) 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(); /*運(yùn)行結(jié)果: 此處為文本 此處為圖像 */ ?>
四、參數(shù)化工廠(chǎng)方法模式
使用參數(shù)化工廠(chǎng)方法模式時(shí),客戶(hù)包含工廠(chǎng)和產(chǎn)品的引用,發(fā)出請(qǐng)求時(shí)需要指定產(chǎn)品的種類(lèi),一個(gè)工廠(chǎng)生產(chǎn)多種產(chǎn)品。增加一種產(chǎn)品時(shí)只需要增加一個(gè)新產(chǎn)品類(lèi)即可。
<?php /** * 參數(shù)化工廠(chǎng)方法設(shè)計(jì)模式 **/ //工廠(chǎng)抽象類(lèi) abstract class Factory { protected abstract function produce(Product $product); public function startFactory(Product $product) { $pro = $this->produce($product); return $pro; } } //工廠(chǎng)實(shí)現(xiàn) class ConcreteFactory extends Factory { protected function produce(Product $product) { return $product->getProperties(); } } //產(chǎn)品類(lèi)接口 interface Product { public function getProperties(); } //文本產(chǎn)品 class TextProduct implements Product { private $text; public function getProperties() { $this->text = "此處為文本"; return $this->text; } } //圖像產(chǎn)品 class ImageProduct implements Product { private $image; public function getProperties() { $this->image = "此處為圖像"; return $this->image; } } //客戶(hù)類(lèi) 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(); /*運(yùn)行結(jié)果: 此處為文本 此處為圖像 */ ?>
以上是“PHP設(shè)計(jì)模式之工廠(chǎng)方法設(shè)計(jì)模式的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。