• JavaSE 单例模式


    单例模式

     什么是单例模式

    保证一个类只能有一个实例,并提供一个访问它的全局访问点

     单例模式是一种常用的软件设计模式之一,其目的是保证整个应用中只存在类的唯一个实例。

    如何保证实例的唯一性:

    1.防止外部初始化

    2.由本类进行实例化

    3.保证实例化一次

    4.对外提供获取实例的方法

    5.线程安全

    饿汉式单例:

     提前创建好一个实例,时刻准备提供使用

    package com.xk;
    /*
     *作者:吴志龙
     *日期:2018年8月6日  
    */
    /**
     * 饿汉式
     * @author 27783
     *
     */
    public class Singleton {
        //提供一个对象
        private static final Singleton singleton = new Singleton(); 
        
        //1.私有化构造,保证不能被外部初始化
        private Singleton(){
            
        }
        
        public static Singleton getInstance(){
            
            return singleton;
            
        }
    
    }
    View Code

    ①声明静态私有类变量,且立即实例化,保证实例化一次

    ②私有构造,防止外部实例化(通过反射是可以实例化的,不考虑此种情况)

    ③提供public的getInstance()方法供外部获取单例实例

    好处:线程安全;获取实例速度快 缺点:类加载即初始化实例,内存浪费

     

    懒汉式

     

    package com.xk;
    /*
     *作者:吴志龙
     *日期:2018年8月6日  
    */
    /**
     * 懒汉式
     * @author 27783
     *
     */
    public class Singleton {
         
        private static  Singleton singleton =null; 
        
        //1.私有化构造,保证不能被外部初始化
        private Singleton(){
            
        }
        
        public static Singleton getInstance(){
            
            if(singleton==null){
                singleton = new Singleton();//当没有这个对象是创建,并只创建一次
            }
            
            return singleton;
            
        }
    
    }
    View Code

    优点:在获取实例的方法中,进行实例的初始化,节省系统资源

    缺点:①如果获取实例时,初始化工作较多,加载速度会变慢,影响系统系能

    ②每次获取实例都要进行非空检查,系统开销大

    ③非线程安全,当多个线程同时访问getInstance()时,可能会产生多个实例

     

     

    单例模式的优缺点:

            优点:该类只存在一个实例,节省系统资源;对于需要频繁创建销毁的对象,使用单例模式可以提高系统性能。

      缺点:不能外部实例化(new),调用人员不清楚调用哪个方法获取实例时会感到迷惑,尤其当看不到源代码时。

        

  • 相关阅读:
    数组和类集排序总结
    toString()方法
    冒泡排序java
    Scanner类输入字符串和整形数字
    身份证分组
    jsonp的实质
    在伪数组上部署iterator方法
    获取属性的方法
    合并以及对于引用克隆
    深度复制对象已解决循环引用
  • 原文地址:https://www.cnblogs.com/wuzhilong/p/9430868.html
Copyright © 2020-2023  润新知