Singleton w ES6

Poniżejprzykład implementacji Singletona w ES6.

  export class EmptySingleton {
    constructor() {
      if(EmptySingleton.singletonInstance) {
        return EmptySingleton.singletonInstance;
      }

      EmptySingleton.singletonInstance = this;


    }
  }

  export class SingletonExample {
    constructor() {
      if(SingletonExample.singletonInstance) {
        return SingletonExample.singletonInstance;
      }

      SingletonExample.singletonInstance = this;

      this.value = 1;
    }

    setValue(newValue) {
      this.value = newValue;
    }

    getValue() {
      return this.value;
    }

    printValue() {
      console.log(this.value);
    }
  }
  import {SingletonExample} from '../patterns/singleton';

  export default class ComponentInfluencingSingleton {
    constructor() {
      this.singletonExample = new SingletonExample();
    }

    changeSingletonValue(newValue) {
      this.singletonExample.setValue(newValue);
    }
  }
  import {SingletonExample} from './patterns/singleton';
  import ComponentInfluencingSingleton from './components/componentInfluencingSingleton';
  function init() {
    let s1 = new SingletonExample(),
      s2 = new SingletonExample(),
      component = new ComponentInfluencingSingleton();

    s1.printValue(); // 1
    s2.printValue(); // 1

    s1.setValue(2);

    s1.printValue(); // 2
    s2.printValue(); // 2

    s2.setValue(3);

    s1.printValue(); // 3
    s2.printValue(); // 3

    console.log(s1 === s2); // true

    component.changeSingletonValue(6);

    s1.printValue(); // 6
    s2.printValue(); // 6
  }

  $(document).ready(init);