• 单例模式之我见


    单例模式是一种最常见的设计模式,校招中如果要进大公司,必须透彻的掌握单例模式,总结了常见的一些单例模式

    首先是最简单的恶汉模式,恶汉模式是一种最简单的单例模式

    	/**
    	 * 恶汉模式
    	 */
    public class SingleTon {
    	private static final SingleTon instance = new SingleTon();
    	private SingleTon(){
    		
    	}
    	public static SingleTon getInstance() {
    		return instance;
    	}
    }
    

      其实是懒汉加载模式,最简单的懒汉加载模式如下

    public class SingleTon {
    	private static SingleTon instance = null ;
    	private SingleTon(){
    		
    	}
    	public  static SingleTon getInstance() {
    		if (instance == null) {
    			instance = new SingleTon();
    		}
    		return instance;
    	}
    }
    

    但上述懒汉模式是线程不安全的,可以对其进行加锁

    public class SingleTon {
    	private static SingleTon instance = null ;
    	private SingleTon(){
    		
    	}
    	public static synchronized SingleTon getInstace(){
    		if (instances == null ) {
    			return instances = new SingleTon();
    		}
    		return instances;
    	}
    }
    

      或者双重加锁模式

    public class SingleTon {
    	private static SingleTon instance = null ;
    	private SingleTon(){
    		
    	}
    	public static SingleTon getInstance(){
    		if (instances == null) {
    			synchronized (SingleTon.class) {
    				instances = new SingleTon();
    			}
    		}
    		return instances;
    	}
    }
    

      

    单例模式还可以用内部类来实现

          
    public class SingleTon {
          public static class SingleTonHolder{
    		private static SingleTon instance = new SingleTon();
    	}
    
    	public SingleTon() {
    	}
    	public static SingleTon getInstance() {
    		return SingleTonHolder.instance;
    	}
    }    
    

    看看大牛Jon Skeet是怎么写单例的 (c#版)

    public sealed class Singleton
    {
        Singleton()
        {
        }
    
        public static Singleton Instance
        {
            get
            {
                return Nested.instance;
            }
        }
    
        class Nested
        {
            // Explicit static constructor to tell C# compiler
            // not to mark type as beforefieldinit
            static Nested()
            {
            }
    
            internal static readonly Singleton instance = new Singleton();
        }
    }
    有任何疑问可联系本人huwei08@baidu.com
  • 相关阅读:
    python学习之列表和字典
    python学习之字符串(下)
    python学习之数字
    python学习之核心数据类型
    android 学习Layout布局的使用
    android学习SeekBar的使用
    android学习Gallery和ImageSwitch的使用
    android学习ScrollView的使用
    android学习ViewFlipper的使用
    C#怎么判断传入int值是否是枚举里面的值
  • 原文地址:https://www.cnblogs.com/huwei0814/p/3840387.html
Copyright © 2020-2023  润新知