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

    单例模式:

    01.在整个应用程序中,一个类只有一个实例对象!

    02.这个实例对象只能通过本类中创建!====》私有构造方法

    03.别人还得使用,通过本类中创建的一个对外访问的接口,来返回本类的实例对象!

    创建单例模式的步骤:

    1.创建静态变量

    2.私有构造

    3.提供对外访问接口

    实现单例模式的3种方式:

    1.懒汉式:

     用户第一次 调用getInstance()的时候,对象的唯一视力才会被创建

     特点:加载类是比较快,但运行时获取对象速度慢,线程不安全

    package com.xdf.bean;
    
    /**
     * 懒汉式:
     * 之后用户第一次 调用getInstance()的时候,对象的唯一实例才会被创建!
     */
    public class Student {
    
        // 1.创建静态变量
        private static Student stu;
    
        // 2.私有化构造
        private Student() {
        }
    
        // 3.提供对外访问的接口
        public static synchronized Student getInstance() {
            if (stu == null) {
                stu = new Student(); // 唯一的对象实例
            }
            return stu;
        }
    
    }

    2.饿汉式   (推荐使用):

    在类装载时候,单例对象就被创建了

    特点:加载类是比较慢,但运行时获取对象的速度快,线程安全

    package com.xdf.bean;
    
    /**
     * 饿汉式:
     * 在类装载的时候,单例对象就被创建了!
     */
    public class Student2 {
    
        // 1.创建静态变量
        private static Student2 stu = new Student2();
    
        // 2.私有化构造
        private Student2() {
        }
    
        // 3.提供对外访问的接口
        public static synchronized Student2 getInstance() {
            return stu;
        }
    
    }

    3.双重校验法:

    package com.xdf.bean;
    
    /**
     * 双重校验锁:
     * 为了保证多线程情况下,单例的正确性!
     */
    public class Student3 {
    
        // 1.创建静态变量
        private static Student3 stu;
    
        // 2.私有化构造
        private Student3() {
        }
    
        // 3.提供对外访问的接口
        public static synchronized Student3 getInstance() {
            if (stu == null) {
                synchronized (Student3.class) {
                    if (stu == null) {
                        stu = new Student3();
                    }
                }
            }
            return stu;
        }
    
    }
  • 相关阅读:
    ajax提交的javascript代码
    简述jpg、gif、png-8、png-24的区别,分别使用场景
    5种IE hasLayoutt的属性及其值
    EF线程唯一与DBSession接口对接
    报错:未能加载文件或程序集“XXX”或它的某一个依赖项。系统找不到指定的文件
    报错:无法将类型"System.Data.EntityState"隐式转换为"System.Data.Entity.EntityState"
    ASP.NET 之异步处理一(Session处理)
    C#基础之类的出现
    Hadoop
    Hadoop
  • 原文地址:https://www.cnblogs.com/liutianci/p/8287335.html
Copyright © 2011-2022 走看看