zoukankan      html  css  js  c++  java
  • 设计模式之单例模式

    1、单例的实现

    /**
     * 恶汉
     * @author haokui
     *
     */
    class Single_villian {
        private Single_villian() {
            
        }
        private static Single_villian s = new Single_villian();
        public  static  Single_villian getSingle() {
            return s;
        }
    }
    /**
     * 懒汉
     * @author haokui
     *
     */
    class Single_lazy {
        private Single_lazy() {
            
        }
        private static Single_lazy s = null;
        public  static synchronized Single_lazy getSingle() {
            if (s == null) {
                return new Single_lazy();
            }
            return s;
        }
    }
    /**
     * 使用内部类来更好的实现单例模式
     * @author haokui
     *
     */
    class Single_internal {
        private Single_internal() {
        }
        public  static  Single_internal getSingle() {
                return Internal.s;
        }
        private static class Internal {
            public  static  Single_internal s = new Single_internal();
        }
    }

    第一种方式恶汉,饿汉式在类创建的同时就实例化一个静态对象出来,不管之后会不会使用这个单例,都会占据一定的内存,但是相应的,在第一次调用时速度也会更快,因为其资源已经初始化完成。

    第二种懒汉。性能比较低,为了线程安全加了同步关键字。

    第三种采用静态内部的方式来实现。外部类被加载的时候,内部类不会被加载,只有在调用内部类的静态方法或者属性的时候才会被加载,这样正好能保证只产生一个实例,而且不存在线程安全的问题。

  • 相关阅读:
    ACM 01背包问题
    HDU 1222(数论,最大公约数)
    HDU 1045(质因数分解)
    HDU 4548(美素数)
    POJ 1458 Common Subsequence
    light oj 1047-neighbor house
    POJ 3903 Stock Exchange
    HDU 1069 monkey an banana DP LIS
    max sum
    ACM比赛
  • 原文地址:https://www.cnblogs.com/hkdpp/p/9072224.html
Copyright © 2011-2022 走看看