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

    单例模式保证了一个类的实例的全局唯一性。

    饿汉模式的单例模式:

    public class Singleton {
        //饿汉模式
        private Singleton(){}  //构造方法私有
    
        private static Singleton singleton=new Singleton(); //在类内部创建实例对象
    
        public static Singleton getSingleton(){ //对外提供一个获得该实例对象的公共接口
            return singleton;
        }
    
        public static void main(String[] args) {
            Singleton singleton = getSingleton();  //获得实例对象
            Singleton singleton1 = getSingleton(); //获得实例对象
            System.out.println(singleton.hashCode()); //1836019240
            System.out.println(singleton1.hashCode());//1836019240
        }
    
    }

    由于饿汉模式是不管程序是否需要该实例对象,都会进行创建,比较浪费资源。由此提出了懒汉模式。即就是:当程序中需要使用该实例对象时,才进行创建该实例对象。但此过程会涉及到多线程并发问题。

    懒汉模式的单例模式:

    public class Singleton_Lazy_Man {
    
        //构造方法私有
        private Singleton_Lazy_Man(){}
    
        //声明一个全局唯一的实例对象,并未直接创建实例对象
        private static Singleton_Lazy_Man singleton_lazy_man;
    
        //定义向外提供访问的共有接口,同时创建该唯一的实例对象
        public static Singleton_Lazy_Man getSingleton_lazy_man(){
            if(null==singleton_lazy_man){ //实例对象未创建时
                synchronized (Singleton_Lazy_Man.class){
    //                if(null==singleton_lazy_man){
    //                    singleton_lazy_man=new Singleton_Lazy_Man();
    //                }
                    singleton_lazy_man=new Singleton_Lazy_Man();
                }
            }
            return singleton_lazy_man;
        }
    
        public static void main(String[] args) {
            Singleton_Lazy_Man singleton_lazy_man = getSingleton_lazy_man();
            Singleton_Lazy_Man singleton_lazy_man1 = getSingleton_lazy_man();
            //打印发现 hashCode码是相同的
            System.out.println(singleton_lazy_man.hashCode());
            System.out.println(singleton_lazy_man1.hashCode());
        }
    
    }

    lk

  • 相关阅读:
    Java中的枚举与values()方法
    为什么要使用双亲委派机制?
    java中finalize()方法
    jdk中rt.jar的作用
    IDEA查看maven依赖树,找出冲突jar包,以及 exclusion 冲突的包
    Linux 环境下SQLPLUS 回退键无法使用处理方法
    Hive字段注释会显示成from deserializer
    LinkedList类的poll、pop等方法
    static代码块执行顺序
    机器学习--线性回归
  • 原文地址:https://www.cnblogs.com/xbfchder/p/11450671.html
Copyright © 2011-2022 走看看