您的位置:首页 > 编程语言 > PHP开发

PHP设计模式之工厂方法设计模式实例分析

2019-01-09 16:34 1021 查看

来源:http://news.mkq.online/ 作者:牛站新闻

本文实例讲述了PHP设计模式之工厂方法设计模式。分享给大家供大家参考,具体如下:

一、什么是工厂方法模式

作为一种创建型设计模式,工厂方法模式就是要创建“某种东西”。对于工厂方法,要创建的“东西”是一个产品,这个产品与创建它的类之间不存在绑定。实际上,为了保持这种松耦合,客户会通过一个工厂发出请求,再由工厂创建所请求的产品。利用工厂方法模式,请求者只发出请求,而不具体创建产品。

二、什么时候使用工厂方法模式

如果实例化对象的子类可能改变,就要使用工厂方法模式。

三、一般工厂方法模式

使用一般工厂方法模式时,客户只包含工厂的引用,一个工厂生产一种产品。增加一种产品的同时需要增加一个新工厂类和一个新产品类。
01

<?php 02 /** 03 一般工厂方法设计模式 04 */ 05 //工厂抽象类 06 abstract class Factory 07 { 08 protected abstract function produce(); 09 public function startFactory() 10 { 11 $pro = $this->produce(); 12 return $pro; 13 } 14 } 15 //文本工厂 16 class TextFactory extends Factory 17 { 18 protected function produce() 19 { 20 $textProduct = new TextProduct(); 21 return $textProduct->getProperties(); 22 } 23 } 24 //图像工厂 25 class ImageFactory extends Factory 26 { 27 protected function produce() 28 { 29 $imageProduct = new ImageProduct(); 30 return $imageProduct->getProperties(); 31 } 32 } 33 //产品类接口 34 interface Product 35 { 36 public function getProperties(); 37 } 38 //文本产品 39 class TextProduct implements Product 40 { 41 private $text; 42 function getProperties() 43 { 44 $this->text = "此处为文本"; 45 return $this->text; 46 } 47 } 48 //图像产品 49 class ImageProduct implements Product 50 { 51 private $image; 52 function getProperties() 53 { 54 $this->image = "此处为图像"; 55 return $this->image; 56 } 57 } 58 //客户类 59 class Client 60 { 61 private $textFactory; 62 private $imageFactory; 63 public function __construct() 64 { 65 $this->textFactory = new TextFactory(); 66 echo $this->textFactory->startFactory() . '
'; 67 $this->imageFactory = new ImageFactory(); 68 echo $this->imageFactory->startFactory() . '
'; 69 } 70 } 71 $client = new Client(); 72 /运行结果: 73 此处为文本 74 此处为图像 75 */ 76 ?>

四、参数化工厂方法模式

使用参数化工厂方法模式时,客户包含工厂和产品的引用,发出请求时需要指定产品的种类,一个工厂生产多种产品。增加一种产品时只需要增加一个新产品类即可。
view source
print
?
01

<?php 02 /** 03 参数化工厂方法设计模式 04 */ 05 //工厂抽象类 06 abstract class Factory 07 { 08 protected abstract function produce(Product $product); 09 public function startFactory(Product $product) 10 { 11 $pro = $this->produce($product); 12 return $pro; 13 } 14 } 15 //工厂实现 16 class ConcreteFactory extends Factory 17 { 18 protected function produce(Product $product) 19 { 20 return $product->getProperties(); 21 } 22 } 23 //产品类接口 24 interface Product 25 { 26 public function getProperties(); 27 } 28 //文本产品 29 class TextProduct implements Product 30 { 31 private $text; 32 public function getProperties() 33 { 34 $this->text = "此处为文本"; 35 return $this->text; 36 } 37 } 38 //图像产品 39 class ImageProduct implements Product 40 { 41 private $image; 42 public function getProperties() 43 { 44 $this->image = "此处为图像"; 45 return $this->image; 46 } 47 } 48 //客户类 49 class Client 50 { 51 private $factory; 52 private $textProduct; 53 private $imageProduct; 54 public function __construct() 55 { 56 $factory = new ConcreteFactory(); 57 $textProduct = new TextProduct(); 58 $imageProduct = new ImageProduct(); 59 echo $factory->startFactory($textProduct) . '
'; 60 echo $factory->startFactory($imageProduct) . '
'; 61 } 62 } 63 $client = new Client(); 64 /运行结果: 65 此处为文本 66 此处为图像 67 */ 68 ?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: