加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_郴州站长网 (http://www.0735zz.com/)- 云通信、区块链、物联设备、云计算、站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP设计模式之工厂方法设计模式实例详解

发布时间:2022-07-01 12:45:18 所属栏目: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();
  /*运行结果:
  此处为文本
  此处为图像
  */
  ?>

(编辑:开发网_郴州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读