zoukankan      html  css  js  c++  java
  • 创建型模式之单例模式

    定义

    1、定义:

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

    使用单例模式的时机是当实例存在多个会引起程序逻辑错误的时候。比如类似有序的号码生成器这样的东西,怎么可以允许一个应用上存在多个呢?Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。

    常见应用场景:

    1. 项目中读取配置文件的类,一般也只有一个对象。没必要每次使用配置文件的时候,都new一个对象去读取;
    2. 数据库连接池的设计一般是单利模式,因为数据库的连接是很耗资源的;
    3. 在servlet中的Application也是单利模式;
    4. 在Spring中,每个Bean都是单利的,这样的优点就是Spring容器可以去管理;
    5. 在Servet编程中,每个servlet也是单例的;
    6. springMVC中的控制器也是单例的;

    2、类图

      

    1.类图分为三部分,依次是类名、属性、方法

    2.以<<开头和以>>结尾的为注释信息

    3.修饰符+代表public,-代表private,#代表protected,什么都没有代表包可见。

    4.带下划线的属性或方法代表是静态的。

    单例模式,它有以下几个要素:

    • 私有的构造方法
    • 指向自己实例的私有静态引用
    • 以自己实例为返回值的静态的公有的方法

    3、分类

    常见的四种单例模式的实现方式:

      -饿汉式(线程安全,调用效率高,不能延时加载)

      -懒汉式(线程安全,调用效率不高,可延时加载)

      -静态内部类式(线程安全,调用效率高,可延时加载)

      -枚举单例(线程安全,调用效率高,不能延时加载,并且可以避免通过反射和序列化创建新对象)

    饿汉式

    所谓“懒汉式”与“饿汉式”的区别,是在于建立单例对象的时间不同。“懒汉式”是在你真正用到的时候才去建这个单例对象:

    /饿汉式
    public class SingletonTest01 {
        //类初始化装载的时候,初始化该对象(类初始化是天然的线程安全)
        private static SingletonTest01 instance = new SingletonTest01();
        // 私有的构造器
        private SingletonTest01() {
        }
        // 方法没有同步块,并发效率高
        public static SingletonTest01 getInstance() {
            return instance;
        }
    }

    懒汉式

    /单例模式:懒汉式
    public class SingletonTest02 {
    
        //类初始化装载的时候,不初始化该对象(延时加载,真正使用的时候再创建)
        private static SingletonTest02 instance;
    private SingletonTest02() { } //方法需同步保证线程安全,调用效率低 public static synchronized SingletonTest02 getInstance() { if (instance != null) { return instance; } else { return new SingletonTest02(); } } }
  • 相关阅读:
    冲刺 09
    冲刺08
    个人作业-买书
    冲刺07
    冲刺 06
    软件工程 寻找小水王
    冲刺04
    冲刺 03
    冲刺 02
    冲刺3
  • 原文地址:https://www.cnblogs.com/airsen/p/6206821.html
Copyright © 2011-2022 走看看