首页 > 开发 > PHP > 正文

PHP设计模式之工厂模式定义与用法详解

2024-05-04 22:43:43
字体:
来源:转载
供稿:网友

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

工厂模式(Factory Design Pattern)作为一种创建型设计模式, 遵循了开放-封闭原则, 对修改封闭, 对扩展开放. 工厂方法(Factory Method)模式就是要创建"某种东西". 对于工厂方法模式, 要创建的"东西"是一个产品,这个产品与创建它的类之间不存在绑定.实际上,为了保持这种松耦合,客户会通过一个工厂发出请求. 再由工厂创建所请求的产品.也可以换种方式考虑, 利用工厂方法模式, 请求者只发出请求, 而不具体创建产品.

工厂的工作

先建立一个工厂的接口

Factory.php

<?phpabstract class Factory{ //抽象的创建对象的方法 protected abstract function createProduct(); //该方法调用createProduct方法返回一个产品对象. public function start() {   return $this->createProduct(); }}

start方法返回一个产品,该方法调用createProduct方法完成产生产品的操作.所以createProduct的具体实现要构建并返回一个按Product接口实现的产品对象.

比如产品都有一个共同的方法getProperties(), 以下是对应Product接口

Product.php

<?php//产品接口interface Product{ public function getProperties();}

接着, 我们要建立两个工厂,文本工厂TextFactory和图像工厂phptoFactory

TextFactory.php

<?phpinclude_once('Factory.php');include_once('TextProduct.php');class TextFactory extends Factory{ protected function createProduct() {  $product = new TextProduct();  return $product->getProperties(); }}

PhotoFactory.php

<?phpinclude_once('Factory.php');include_once('PhotoProduct.php');class PhotoFactory extends Factory{ protected function createProduct() {  $product = new PhotoProduct();  return $product->getProperties(); }}

可以看到,在工厂方法的实现中, getProperties方法引入了多态(polymorphism), 将用这个方法返回"文本"或"图像". 同一个getProperties()有多个(poly)不同的形态(morphs), 这就是多态.在这种情况下, 其中一种形式返回文本, 而另一种返回图像.

可以在properties这个实现中放入你想要的任何东西,工厂方法设计将会创建这个对象, 并把他返回给Client使用.

下面的是两个产品的实现

TextProduct.php

<?phpinclude_once('Product.php');class TextProduct implements Product{ public function getProperties() {  return "这里是文本产品"; }}

PhotoProduct.php

<?phpinclude_once('Product.php');class PhotoProduct implements Product{ //这是产品具有的方法 public function getProperties() {  return "这里是图像产品"; }}            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表