zoukankan      html  css  js  c++  java
  • Singleton模式(单例模式) 饿汉式和懒汉式

    目的:整个应用中有且只有一个实例,所有指向该类型实例的引用都指向这个实例。

    好比一个国家就只有一个皇帝(XXX),此时每个人叫的“皇帝”都是指叫的XXX本人;

     

    常见单例模式类型:

    饿汉式单例:直接将对象定义出来

    懒汉式单例:只给出变量,并不将其初始化;

    总结:

    饿汉式,static修饰,随着类的加载而加载,会损耗性能,但是方法相对简单

    懒汉式  第一次用的时候相对较慢,因为需要加载!线程,不安全!

     

    package reviewDemo;
    //单例模式
    
    //饿汉式,直接把对象构造出来
    class SingleDemo{
        private static SingleDemo s1 = new SingleDemo();
        private SingleDemo(){
            //提供私有化的构造方法,那么外界就不能构造对象了!
        }
        
        public static SingleDemo getS1() {
            return s1;
        }
    }
    
    //懒汉式,先定义,但是不创建对象
    class SingleDemo2{
        private static SingleDemo2 s3 ;
        
        private SingleDemo2(){
            //提供私有化的构造方法,那么外界就不能构造对象了!
        }
        
        public static SingleDemo2 getS3() {//这是一个方法,返回值为创建的对象!
            if(s3 == null){
                s3 = new SingleDemo2();
            }//和饿汉式的区别,此时才来创建对象!
            return s3;
        }
    }
    
    public class Demo14 {
        public static void main(String[] args) {
            SingleDemo s1 = SingleDemo.getS1();
            SingleDemo s2 = SingleDemo.getS1();
            
            SingleDemo2 s3 = SingleDemo2.getS3();
            SingleDemo2 s4 = SingleDemo2.getS3();
            
            System.out.println(s1 == s2);
            System.out.println(s3 == s4);
            
        }
    }
    
    输出:true true
    
    备注:枚举更加安全些
    package reviewDemo;
    
    enum Stu{
        jake;
        //将构造方法私有化起来,反射也不能创建对象,安全
        private Stu(){
            
        }
    }
    
    public class Demo15 {
        public static void main(String[] args) {
        }
    }
  • 相关阅读:
    底层因为接受到操作系统信号而停止的解决
    C语言判断文件是否存在
    Linux磁盘设备文件(sda,sdb,sdc…)变化问题
    linux mysql 数据目录文件夹移动及所遇到的问题
    Linux Mysql如何移动MySQL数据库目录位置
    Linux 磁盘挂载和mount共享
    提高VS2010/VS2012编译速度
    C++[类设计] ini配置文件读写类config
    WIN32读写INI文件方法
    MS509Team----------------Cknife
  • 原文地址:https://www.cnblogs.com/whu-2017/p/9227695.html
Copyright © 2011-2022 走看看