导航菜单
首页 > 网络编程 > PHP编程 » 正文

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

后台-系统设置-扩展变量-手机广告位-内容正文顶部
这篇文章主要介绍了PHP设计模式之工厂方法设计模式,结合实例形式分析了工厂方法设计模式的概念、原理以及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程序设计有所帮助。

您可能感兴趣的文章:

  • PHP面向接口编程 耦合设计模式 简单范例
  • PHP中用接口、抽象类、普通基类实现“面向接口编程”与“耦合方法”简述
收藏此文 赞一个 ( ) 打赏本站

如果本文对你有所帮助请打赏本站

  • 打赏方法如下:
  • 支付宝打赏
    支付宝扫描打赏
    微信打赏
    微信扫描打赏
后台-系统设置-扩展变量-手机广告位-内容正文底部

相关推荐:

留言与评论(共有 0 条评论)
   
验证码:
二维码