php - 做工厂的工厂
问题描述
我有两个工厂:
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
}
}
所以我不知道区分我的两个工厂
感谢帮助
解决方案
首先,您的单例设计应该是一个特征,而不是在整个类中重复。
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();
}
}
推荐阅读
- vb.net - VB .net ListView 控件未在表单中显示任何数据
- javascript - 更改输入数据时如何防止ajax发送多个请求
- python - 使用子值创建 Django 外键字段
- image - 快速径向对称变换 (FRST) 实现 (python) 导致不寻常的十字准线外观伪影
- ios - Swift 4 如何在不同的视图控制器上同时运行两个动画?
- python - 去除第一个字母数字字符前面的特殊字符
- javascript - 将过滤后的 html 表格数据下载到 csv 文件
- intellij-idea - 如何在 Intellij IDEA 2019.1.3 中推送修改提交,它总是在 gerrite 中创建两个独立的提交
- java - 在 JSP 中显示字符串值
- mysql - 直接创建一个只有年月VS索引日期时间/时间戳列的新索引列