zoukankan      html  css  js  c++  java
  • 单例模式

    一.什么是单例模式?

      定义:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例

    二.类图如下:

      

    三.类图解析

      Singleton类称为单例类,通过使用private的构造函数确保了在一个应用中只产生一个实例,并且是自行实例化的

    四.单例模式的优点

      由于单例模式在内存中只有一个实例,减少了内存开支,特别是一个对象频繁的创建、销毁时,并且创建或销毁时性能无法优化,单例模式的优势就非常明显了

    五.单例模式的缺点

      单例模式一般没有接口,扩展很困难。另外单例模式与单一职责原则有冲突,一个类应该只实现一个逻辑,而不关心它是否是单例的

    六.单例模式的应用场景

      1.要求生成唯一序列号的环境

      2.在项目中需要一个共享访问点或共享数据时,如一个Web页面上的计数器,可以不用把每次刷新都记录到数据库中,使用单例模式保持计数器的值,并确保是线程安全的

      3.创建一个对象需要消耗过多资源,如要访问IO和数据库等资源

      4.需要定义大量的静态常量和静态方法的环境,可以采用单例模式

    七.单例模式的注意事项

      1.注意单例模式的线程安全的问题,尤其是在高并发的情况下

      2.要考虑对象的复制情况。在java中对象默认是不可以被复制的,若实现了Cloneable接口,并实现了clone方法,则是可以通过对象复制方式创建一个新对象,对象复制是不需要调用类的构造函数,因此即使是私有的构造函数,对象仍然可以被复制

    八.Spring对单例模式的应用

      在Spring中,每个Bean默认都是单例的,这样的优点是Spring容器可以管理Bean的生命周期,决定什么时候创建,什么时候销毁,销毁的时候需要做什么处理等等

  • 相关阅读:
    ubuntu密码正确,却不能登录图形界面
    【转】ubuntu右键在当前位置打开终端
    一些值得学习的Unity教程 (很实用的包括源码)
    Git 报错:git
    Unity3D面试——真实的面试,unity3d面试
    拖拽以及常用的鼠标事件
    白话经典算法系列之一 冒泡排序的三种实现
    c#封装三维向量,另外也看了下别人的C++封装
    c#面试3(选择题)
    Unity3D中目标相对自身的前后左右方位判断
  • 原文地址:https://www.cnblogs.com/lyc-code/p/12384570.html
Copyright © 2011-2022 走看看