PHP工厂模式之简单工厂模式

简单工厂模式(Simple Factory Pattern)

在简单工厂模式中,可以根据参数的不同返回不同类的实例。
简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

简单工厂模式包含如下角色:
  Factory:工厂角色,工厂角色负责实现创建所有实例的内部逻辑
  Product:抽象产品角色,抽象产品角色是所创建的所有对象的父类,负责描述所有实例所共有的公共接口
  ConcreteProduct:具体产品角色,具体产品角色是创建目标,所有创建的对象都充当这个角色的某个具体类的实例。

简单工厂的命名建议:

类命名建议为“模块名称+Factory”,比如,用户模块的工厂就称为UserFactory
方法名称通常为“get+接口名称”或者是“create+接口名称”。比如用户接口名称为UserEbi,那么方法名称通常为getUserEbi或者createUserEbi。

代码实现
1,定义一个接口类

namespace app\lib\people;
interface people{
    function getName();
    function getAge();
}

2,定义学生工厂类

class StudentFactory implements people{
   protected $_name;
   protected $_age;
  public function __construct($name, $age){
      $this->_name = '小明同学';
      $this->_age = ''8";
  }
  public  function getName(){
     return $this->_name;
  }
  public function getAge(){
      return $this->_age;
  }
}

3,定义一个老师工厂类

class TeacherFactory implements people{
   protected $_name;
   protected $_age;
  function __construct(){
      $this->_name = '小明老师';
      $this->_age = ''28";
  }
  function getName(){
     return $this->_name;
  }
  function getAge(){
      return $this->_age;
  }
}

还可以创建多个工厂类,例如清洁工工作类,保安工厂类,校长工厂类等等

4,创建总工厂类,专门用做类的创建


class Factory
{
    public static function build($className = null)
    {
        $className = ucfirst($className);
        if ($className && class_exists($className)) {
            return new $className();
        }
        return null;
    }

控制器调用工厂方法

//获得老师的名字
echo Factory::build("teacher")->getName();  #输出 小明老师
//获得学生的名字
echo Factory::build("student")->getName(); #输出 小明同学

你可能感兴趣的:(PHP工厂模式之简单工厂模式)