多例模式 - Multiton Pattern
定义
多例是单例的一种延伸。是指一个类有多个相同实例,而且该实例都是该类本身。
设计的原则和思想
- 解耦了对象的创建和使用。
- 不变部分是使用,变化部分是创建。
- 核心思想是限制对象的数量,并且对对象进行重复使用。
一句话概括设计模式
一个类有多种形态,并且每一种形态是一个单例。
结构中包含的角色
Multiton 多例对象
最小可表达代码
final class Multiton
{
private static $instanceNum = 3;
private static $instances = [];
// 不能创建实例
private function __construct(){}
// 不能克隆
private function __clone(){}
// 不能序列化
private function __wakeup(){}
// 获取实例
public static function getInstance() : self{
self::initInstances();
return self::$instances[rand(0, self::$instanceNum - 1)];
}
// 初始化多个实例
public static function initInstances()
{
if (count(self::$instances) <= 0) {
for ($i = 0; $i < self::$instanceNum; $i++) {
self::$instances[$i] = new static();
}
}
}
}
$multiton = Multiton::getInstance();
var_dump($multiton);
实际应用场景
- 多个数据库连接器。MySQL,SQLite,redis, mongo…
- 多个记录器。记录调试消息,记录错误消息,记录普通消息
- VIP用一个数据库,普通用户用另外一套数据库。
- Laravel的Request类,每个请求都会有不同的参数,所以这里就是多例。