zoukankan      html  css  js  c++  java
  • 大战设计模式【7】—— 单例模式

    单例模式(Singleton)

     

    设计模式使用的例子https://github.com/LinkinStars/DesignPatternsAllExample

     

    一、定义

    确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。
    单例模式是一种对象创建模式。



    二、结构

    Singleton(单例);



     

    三、优点

    提供了对唯一实例的受控访问。单例类封装了它的唯一实例,所以它可以严格控制客户怎样以及何时访问它。
    由于在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象,单例模式无疑可以提高系统的性能。
    允许可变数目的示例。基于单例模式,开发人员可以进行扩展,使用与控制单例对象相似的方法来获得指定个数的实例对象,既节省系统资源,又解决了单例对象共享过多有损性能的问题。



     

    四、缺点

    单例模式中没有抽象层,因此单例类的扩展有很大的困难。
    单例类的职责过重,在一定程度上违背了单一职责的原则。



     

    五、应用场景

    系统只需要一个实例对象。例如:系统要求提供一个唯一的序列号生成器或者资源管理器,又或者需要考虑资源消耗太大而只允许创建一个对象。
    客户调用类的单个实例只允许使用一个公共访问点,除了该公共访问点,不能通过其他途径访问该实例。



    六、个人总结

    1、单例模式应用场景非常的多,对它最直接简单的描述就是:全局唯一。
    2、单例模式要保证的点:
    无论是多少个线程还是多少人访问,获得的对象都是同一个。
    同时必须考虑性能和存储
    3、实现单例模式的基本步骤
    私有化变量
    私有化构造方法
    提供公开的获取变量的方法
    4、实现单例模式的代码有很多种,这里举例最常见的三种,也就是例子中描述的三种
    饿汉式(eager):直接静态初始化变量,适用于访问量平凡(饥饿)
    懒加载(lazyLoad):获取对象时才初始化对象,并且用同步约束获取对象的方法,适用于访问量很少但是需要使用单例的情况
    双重检查加锁(double-checked locking):只有第一次才进行同步检查,大大减少了getInstance的时间


     
    参考博客:http://www.cnblogs.com/edisonchou/p/6618503.html
  • 相关阅读:
    hdu 1269 迷宫城堡(trajan判环)
    codeforces 591 E. Three States(bfs+思维)
    PowerDesigner 教程
    SQL中inner join、outer join和cross join的区别
    SQL 报表 --简易进销系统
    SQL PROMPT5.3.4.1的一些设置选项
    SQL锁机制和事务隔离级别
    洛谷P1901 发射站
    洛谷P1823 [COI2007] Patrik 音乐会的等待
    洛谷P2947 [USACO09MAR]向右看齐Look Up
  • 原文地址:https://www.cnblogs.com/linkstar/p/7686957.html
Copyright © 2011-2022 走看看