菜单

金沙国际:PHP设计情势之工厂方法设计情势实例剖判

2019年6月27日 - 金沙编程资讯

二、几时利用工厂方法格局

选拔相似厂子方法格局时,客户只包蕴工厂的引用,二个厂子生产一种产品。扩大一种产品的同一时候须要追加贰个新工厂类和二个新产品类。

越来越多关于PHP相关内容感兴趣的读者可查看本站专项论题:《php面向对象程序设计入门教程》、《PHP数组(Array)操作本事大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总计》、《php字符串(string)用法计算》、《php+mysql数据库操作入门教程》及《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设计格局之工厂方法设计形式。分享给大家供我们仿照效法,具体如下:

用作一种创造型设计方式,工厂方法形式正是要创立“某种东西”。对于工厂方法,要开创的“东西”是一个产品,那个产品与创制它的类之间不存在绑定。实际上,为了保证这种松耦合,客户会由此八个工厂发出诉求,再由工厂成立所央浼的出品。利用工厂方法格局,供给者只发出须求,而不现实创立产品。

利用参数化学工业厂方法格局时,客户涵盖工厂和成品的引用,发出要求时需求钦命产品的品种,多个厂子生产各种产品。增添一种产品时只须要充实一个新产品类就能够。

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

<?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();
/*运行结果:
此处为文本
此处为图像
*/
?>

三、一般厂子方法形式

四、参数化学工业厂方法形式

即使实例化对象的子类可能变动,将在动用工厂方法格局。

你只怕感兴趣的小说:

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图