The js singleton pattern details the example

  • 2020-03-29 23:56:27
  • OfStack

What is a singleton?

Singletons require one and only one instance of a class to provide a global access point. So it bypasses the normal controller so that it has only one instance for the user to use, and the user doesn't care how many instances there are, so it's the designer's responsibility


In JavaScript, Singletons serve as a shared resource namespace which isolate implementation code from the global namespace so as to provide a single point of access for functions.

In javascript, a singleton is treated as a global namespace, providing a point of access to the object.

Usage scenarios


In practice, the Singleton pattern is useful when exactly one object is needed to coordinate others across a system. 

Singletons are more suitable for an object to interact with other systems.

analogy

The singleton is similar to the group leader of a group. There is only one group leader at a time, and the group leader is responsible for assigning, assigning and coordinating the work of the group members.

Example 1: this is the simplest singleton that stores properties and methods in the form of key and value


var A = {
   xx:3,
   yy:4,
   B:function(el){

   },
   C:function(el){

   },
   D:function(el){

   },
   E:function(el){

   }
}


Instance 2: first create a reference to an instance, then determine if the instance exists, if it does not, then create it, if it exists, then return it, make sure there is only one.


var mySingleton = (function () {
//Instance stores a reference to a singleton Instance
var instance;
function init() {
// Singleton
//Private methods and variables
function privateMethod(){
    console.log( "I am private" );
}
var privateVariable = "Im also private";
return {
  //Common methods and variables
  publicMethod: function () {
    console.log( "The public can see me!" );
  },
  publicProperty: "I am also public"
};
};
return {
//If the instance does not exist, create one
getInstance: function () {
  if ( !instance ) {
    instance = init();
  }
  return instance;
}
};
})();
var singleA = mySingleton;
var singleB = mySingleton;
console.log( singleA === singleB ); // true

Example 3:


var SingletonTester = (function () {
  // options: an object containing configuration options for the singleton
  // e.g var options = { name: "test", pointX: 5}; 
  function Singleton( options )  {
    // set options to the options supplied
    // or an empty object if none are provided
    options = options || {};
    // set some properties for our singleton
    this.name = "SingletonTester";
    this.pointX = options.pointX || 6;
    this.pointY = options.pointY || ; 
  }
  // our instance holder 
  var instance;
  // an emulation of static variables and methods
  var _static  = {  
    name:  "SingletonTester",
    // Method for getting an instance. It returns
    // a singleton instance of a singleton object
    getInstance:  function( options ) {   
      if( instance  ===  undefined )  {    
        instance = new Singleton( options );   
      }   
        return  instance;      
    } 
  }; 
  return  _static;
})();
var singletonTest  =  SingletonTester.getInstance({
  pointX:  5
});
// Log the output of pointX just to verify it is correct
// Outputs: 5
console.log( singletonTest.pointX ); 


Related articles: