欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-05-23 21:39:39
本文实例讲述了php设计模式之工厂方法设计模式。分享给大家供大家参考,具体如下: 一、什么是工厂方法模式 作为一种创建型设计模式,工厂方法模式就是要创建“某种东西”。对...

本文实例讲述了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相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《php数组(array)操作技巧大全》、《php基本语法入门教程》、《php运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总

希望本文所述对大家php程序设计有所帮助。