1、特点

  • 在全局呗唯一使用
  • 一个类只有一个实例

    2、UML类图

    Java有private属性,实现单例模式很容易 ```java public class SingleObject {

    private SingleObject() {} // 私有化构造函数,外部不能实例化只能内部实例化

    private SingleObject instance = null

    private SingleObject getInstance() {

    1. if (instance == null) {
    2. return new SingleObject()
    3. }
    4. return instance

    } }

// 外部只能通过getInstance来获取这个单例 SingleObject.getInstance()

  1. JavaScript
  2. ```javascript
  3. class SingleObject {
  4. login() { console.log('login...') }
  5. }
  6. SingleObject.getInstance = (function() {
  7. let instance
  8. return function() { // 利用闭包
  9. if (!instance) {
  10. instance = new SingleObject()
  11. }
  12. return instance
  13. }
  14. })()
  15. // 缺点是SingleObject还是可以被实例化
  16. let obj = new SingleObject()

示例:

  • JQuery只有一个$
  1. if (window.jQuery != null) {
  2. return window.jQuery
  3. } else {
  4. // 初始化
  5. }
  • 购物车
  • vuex redux中的store