PHP面试常考之设计模式——工厂模式

12

你好,是我琉忆,PHP程序员面试笔试系列图书的作者。

本周(2019.3.11至3.15)的一三五更新的文章如下:

周一:PHP面试常考之设计模式——工厂模式
周三:PHP面试常考之设计模式——建造者模式
周五:PHP面试常考之设计模式——策略模式

今天这篇文章主要讲解的是PHP面试常考的设计模式之工厂模式。工厂模式其实可以划分为:简单工厂模式、工厂方法模式、抽象工厂模式等。具体它们有什么区别,用途有哪些呢?以下我将进行讲解。

自己整理了一篇“设计模式需要遵守的5大原则”的文章,关注公众号:“琉忆编程库”,回复:“原则”,我发给你。

以下内容如需转载,请注明作者和出处。

1、简单工厂模式

介绍:
简单工厂模式又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

UML图:

clipboard.png

说明:

  • CashFactory类:负责创建具体产品的实例
  • CashSuper类:抽象产品类,定义产品子类的公共接口
  • CreateCashAccept 类:具体产品类,实现Product父类的接口功能,也可添加自定义的功能

简单工厂模式最大的优点在于实现对象的创建和对象的使用分离,将对象的创建交给专门的工厂类负责,但是其最大的缺点在于工厂类不够灵活,增加新的具体产品需要修改工厂类的判断逻辑代码,而且产品较多时,工厂方法代码将会非常复杂。

实现示例:

<?php 
//简单工厂模式
class Cat
{
  function __construct()
  {
      echo "I am Cat class <br>";
  }
}
class Dog
{
  function __construct()
  {
      echo "I am Dog class <br>";
  }
}
class Factory
{
  public static function CreateAnimal($name){
      if ($name == 'cat') {
          return new Cat();
      } elseif ($name == 'dog') {
          return new Dog();
      }
  }
}

$cat = Factory::CreateAnimal('cat');
$dog = Factory::CreateAnimal('dog');

2、工厂方法模式

介绍:
工厂方法模式通过定义一个抽象的核心工厂类,并定义创建产品对象的接口,创建具体产品实例的工作延迟到其工厂子类去完成。