PHP设计模式之工厂方法设计模式实例分析
发布:smiling 来源: PHP粉丝网 添加日期:2021-09-12 15:10:28 浏览: 评论:0
本文实例讲述了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();
- /*运行结果:
- 此处为文本
- 此处为图像
- */
- ?>
Tags: PHP设计模式 PHP工厂模式
相关文章
- ·php设计模式——单例模式(Singleton)的常见应用场景(2015-04-15)
- ·php 设计模式之单例模式例子(2016-07-27)
- ·PHP设计模式之:单例模式的学习笔记(2016-07-29)
- ·PHP设计模式之:注册模式入门教程(2016-07-29)
- ·PHP设计模式之:适配器模式入门教程(2016-07-29)
- ·PHP设计模式之:数据映射模式教程(2016-07-29)
- ·PHP设计模式之:观察者模式学习笔记(2016-07-29)
- ·PHP常用设计模式之委托设计模式(2021-07-09)
- ·php设计模式之委托模式(2021-07-09)
- ·PHP设计模式之观察者模式实例(2021-07-10)
- ·PHP设计模式之模板方法模式定义与用法详解(2021-09-06)
- ·PHP设计模式之状态模式定义与用法详解(2021-09-06)
- ·PHP设计模式之装饰器模式定义与用法详解(2021-09-06)
- ·PHP设计模式之适配器模式定义与用法详解(2021-09-06)
- ·PHP设计模式之原型模式定义与用法详解(2021-09-06)
- ·PHP设计模式之工厂模式定义与用法详解(2021-09-06)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)