单例模式,属于创建类型的一种常用的软件设计模式。通过单例模式的方法创建的类在当前进程中只有一个实例(根据需要,也有可能一个线程中属于单例,如:仅线程上下文内使用同一个实例)、
大白话:对于PHP而言 在一次生命周期中,如果使用了单例模式。我们不管实例化多少次。整个生命周期只会存在一个实例。
这些场景为什么要用到单例模式?
private static $instance = null;// 禁止被实例化private function __construct(){}// 禁止cloneprivate function __clone(){}// 实例化自己并保存到$instance中,已实例化则直接调用public static function getInstance(): object{if (empty(self::$instance)) {self::$instance = new self();}return self::$instance;}public function test(): string{return '这是一个单例模式';}}// 两次调用返回同一个实例
$single1 = Singleton::getInstance();
$single2 = Singleton::getInstance();var_dump($single1, $single2);
echo $single1->test();
Golang代码示例
package mianimport "fmt"var instanse *singlertype singler struct {Name string
}func NewSingler()*singler{return instanse
}func init() {instanse = new(singler)instanse.Name = "test"
}func main() {singler := NewSingler()fmt.Println(singler.Name)
}
package mainimport ("fmt""sync"
)var instanse *singler
var mutex sync.Mutextype singler struct {Name string
}func NewSingler()*singler {if instanse == nil{mutex.Lock()defer mutex.Unlock()if instanse == nil{instanse = new(singler)instanse.Name = "test"}}return instanse
}func main() {singler := NewSingler()fmt.Println(singler.Name)
}
上一篇:CentOS 7 安装LibreOffice 7.5 过程
下一篇: 幼儿园大班教学随笔