Definition of singleton pattern

Ensure that there is only one instance of a class , Cannot duplicate instances , It can only instantiate itself , And provide this instance to the whole system .

Problem solved

That is, a class is instantiated only once , When someone else instantiates it again , Returns the first instantiated object , Can avoid a lot of new operation , Reduce resource consumption .

principle : Four steps , Three private and one public

* Privatization static properties
* Construction method of privatization
* Privatization cloning method
* Static method of public ownership
Packaging background

When there are multiple singleton classes in a project , Every new class , We have to define "three private and one public" , It's a bit repetitive , It's not just a waste of time and energy , And the code is bloated and difficult to maintain , Is there any More elegant How to write it ?

Trait To encapsulate the singleton
php It has been a single inheritance language from before to now , Properties and methods cannot be inherited from both base classes , To solve this problem ,php Out Trait This feature
usage : By using use keyword , Declare the Trait name , concrete Trait Statement use of Trait key word ,Trait Cannot be instantiated .

Code Examples

Create a Trait
<?php /** * Trait Singleton Singleton mode */ Trait Singleton { private static $instance
= null; private function __construct() { parent::__construct(); // Construction method of privatization }
private function __clone() { // Privatization cloning method } public function __sleep() {
// rewrite __sleep method , Leave the return empty , Prevent serialization and deserialization from getting new objects return []; } public static function
getInstance() { if (!isset(self::$instance)) { self::$instance = new
static();// Not here new self(),self and static difference } return self::$instance; } }
Multiple inheritance usage
Other classes are used only in code use Singleton; , You can inherit the singleton <?php /** * Desc: Business 1 Inheritance instance */ class YieWu1
{ use Singleton; // Key line of code public function getInfo(){ // Business code } } <?php /** *
Desc: Business 2 Inheritance instance */ class YieWu2 { use Singleton; // Key line of code public function
getInfo(){ // Business code } }
Real column call
YieWu1::getInstance()->getInfo(); YieWu2::getInstance()->getInfo();

Technology
©2020 ioDraw All rights reserved
Java realization PDF Online preview ( Four methods ) Android Development — Display food information according to customer budget spark.sql.shuffle.partitions and spark.default.parallelism The difference between Big data environment --- data warehouse (hive+mysql+hadoop) The construction of Children programming children's learning route What do you do in Shanghai to make money fast ? this 10 You can have a try ! Advanced programmer - Deep understanding of data structure After the outbreak Which programming has a bright future 2020 Nobel Prize in physiology or medicine announced Trump's "VIP therapy ": Is receiving a drug treatment that has not yet been approved