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

    所谓的设计模式指的就是:遇到同一种情况的,采取的一种成熟的处理的方法--->设计模式。

    本次列举的是单例模式,那么什么是单例模式哪?“单例”也就是单实例,所以要解决的问题就是在内部控制对象的产生,从而保证对象的唯一性,

    其中枚举就是一个单例:

    /**
     * 最简单的单例模式代码
     * @author D H B
     *
     */
    public enum SingleEnum {
    	MONDAY;
    }
    

    1.单例模式:懒汉式和饿汉式

     a:饿汉式

        它指的是不管你有没有使用这个对象,这个对象都会被创建,都会把这个对象加载进内存。

        代码如下:

     

    /**
     * 单例设计模式中的懒汉式
     * 
     * @author dhb
     *
     */
    public class Hungry {
    	// 方式一:
    	private static final Hungry instance = new Hungry();
    
    	// 构造方法私有化,保证对象的唯一性:
    	private Hungry() {
    	}
    
    	// 对外提供公共的获取对象的方法:
    	public static Hungry getInstance() {
    		return instance;
    	}
    
    }
    

      

    /**
     * 方式二:
     * 
     * @author dhb
     *
     */
    public class Singleton {
        //创建实例的对象:
        public static final Singleton instance = new Singleton();
        
        //构造器私有
        private Singleton() {
        }
    
    }

    b:懒汉式

      就是说需要的时候,就创建对象,不需要的时候,就不创建。

    /**
     * 懒汉式:
     * 就是有需要 的时候,再去创建对象,不需要的时候,就不在创建
     * @author dhb
     *
     */
    public class LazySingleton {
        
        private static final LazySingleton instance = null;
        //构造器私有化
        private LazySingleton() {}
        
        /**
         * 对外提供公共的获取对象的方法
         * 说明:此时存在线程的<安全隐患:>
         * @return>
         */
        public static LazySingleton getInstance() {
            if(null == instance) {
                return new LazySingleton();
            }
            return null;
        }

    说明:上述的懒汉式存在安全隐患,所以解决如下:

    /**
     * 懒汉式:增强安全 、提升性能
     */
    public class LazySingletonPlus {
        private static LazySingletonPlus INSTANCE = null;
        // 构造器私有化
        private LazySingletonPlus() {
        }
        // 提供公共的获取对象的方法。
        public static LazySingletonPlus getInstance() {
            if (null == INSTANCE) {//提升效率:如果内存中已经存在这个对象了,那么就不在进"锁 "中判断了。
                synchronized (LazySingletonPlus.class) {//解决线程安全隐患问题:(在静态的方法中不能使用this关键字)
                    if(null == INSTANCE) {
                        INSTANCE = new LazySingletonPlus();
                        return INSTANCE;
                    }
                }
            }
            return null;
        }
    }
  • 相关阅读:
    ccf I’m stuck!
    ccf 最大的矩形
    ccf ISBN号码
    ccf 出现次数最多的数
    ccf 相反数
    BestCoder Round #33
    15年3月CCF真题5-最小花费
    15年3月CCF真题4-网络延时
    15年3月CCF真题3-节日
    15年3月CCF真题2-数字排序
  • 原文地址:https://www.cnblogs.com/donghaibin/p/9141524.html
Copyright © 2011-2022 走看看