首页 > 解决方案 > 做工厂的工厂

问题描述

我有两个工厂:

class Factory
{
   public static function getInstance($type) {
     .....
   }
}

class Factory
{
   public static function getInstance($type) {
     .....
   }

}

所以,现在我想像这样制作我的两个工厂的工厂:

class FactoryOfFactory
{
  public static function getFactory($service)
  {
    switch ($service) {
      case 'fac1':
        $Factory = new Factory();
        break;
      case 'fac2':
        $Factory = new Factory();
    }

    return $Factory
  }
}

所以我不知道区分我的两个工厂

感谢帮助

标签: phpdesign-patterns

解决方案


首先,您的单例设计应该是一个特征,而不是在整个类中重复。

trait Singleton
{
    private ?object $_instance;

    protected function __construct() {}
    private   function __clone    () {}

    public static function GetInstance() {
        if(($i &= self::$_instance)) return $i;
        $i = new self();
        return $i;
    }
}

其次,您不能要求同一命名空间中的两个类。您必须声明单独的命名空间。

namespace App;

class Factory {
    use Singleton;
}

namespace App\Custom;

class Factory {
    use Singleton;
}

从这里,您现在可以像这样使用它们:

namespace App;

use App\Custom\Factory as FactoryTwo;

class FactoryOfFactory {
    use Singleton;

    protected function __construct() {
        FactoryTwo::GetInstance();
        Factory::GetInstance();
    }
}

推荐阅读