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

    饿汉式  懒汉式

    SingletonOne.java:

    package com.snape.singleton;
    
    /**
     * 饿汉式:创建对象实例时直接初始化.
     * 用空间换时间
     */
    public class SingletonOne {
        //1.创建类中私有构造
        private SingletonOne(){
    
        }
    
        //2.创建该类型的私有静态实例
        private static SingletonOne instance = new SingletonOne();
    
        //3.创建静态公有方法返回静态实例对象
        public static SingletonOne getInstance(){
            return instance;
        }
    }
    View Code

    SingletonTwo.java:

    package com.snape.singleton;
    
    /**
     * 懒汉式:类内实例对象创建时并不直接初始化,直到第一次调用getInstance()方法时才完成初始化操作。
     * 用时间换空间
     */
    public class SingletonTwo {
        //1.创建私有构造方法
        private SingletonTwo(){
    
        }
    
        //2.创建静态的该类实例对象
        private static SingletonTwo instance = null;
    
        //3.创建开放的静态方法提供实例对象。
        public static SingletonTwo getInstance(){
            if(instance==null){
                instance = new SingletonTwo();
            }
            return instance;
        }
    }
    View Code

    Test.java:

    package com.snape.test;
    
    import com.snape.singleton.SingletonOne;
    import com.snape.singleton.SingletonTwo;
    
    public class Test {
        public static void main(String[] args) {
    
            //饿汉式
            SingletonOne one = SingletonOne.getInstance();
            SingletonOne two = SingletonOne.getInstance();
    
            System.out.println(one);
            System.out.println(two);
            System.out.println(one==two);   //结果是true,表明 one 和 two 指向的是同一个对象。
    
            System.out.println("============================================");
    
            //懒汉式
            SingletonTwo one1 = SingletonTwo.getInstance();
            SingletonTwo two1 = SingletonTwo.getInstance();
    
            System.out.println(one1);
            System.out.println(two1);
            System.out.println(one1==two1);     //结果是true,表明 one 和 two 指向的是同一个对象。
        }
    }
    View Code

    结果:

  • 相关阅读:
    笔试题-同线程Lock语句递归不会死锁
    EnterWriteLock与lock有啥区别?
    lock(this)其实是个坑
    实际项目中关于ManualResetEvent的用法
    以1个实例讲解ManualResetEvent的作用
    Session有什么重大BUG,微软提出了什么解决方案
    Session和Cookie实现购物车
    VMware打开虚拟机黑屏
    idea使用java整合ice
    elasticsearch基本概念
  • 原文地址:https://www.cnblogs.com/CPU-Easy/p/12252486.html
Copyright © 2011-2022 走看看