• 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

    结果:

  • 相关阅读:
    HDU 1863 畅通工程(Kruskal)
    HDU 1879 继续畅通工程(Kruskra)
    HDU 1102 Constructing Roads(Kruskal)
    POJ 3150 Cellular Automaton(矩阵快速幂)
    POJ 3070 Fibonacci(矩阵快速幂)
    ZOJ 1648 Circuit Board(计算几何)
    ZOJ 3498 Javabeans
    ZOJ 3490 String Successor(模拟)
    Java实现 LeetCode 749 隔离病毒(DFS嵌套)
    Java实现 LeetCode 749 隔离病毒(DFS嵌套)
  • 原文地址:https://www.cnblogs.com/CPU-Easy/p/12252486.html
Copyright © 2020-2023  润新知