zoukankan      html  css  js  c++  java
  • 单例模式之我见

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

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

    	/**
    	 * 恶汉模式
    	 */
    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
  • 相关阅读:
    拥有5大核心竞争力的华为云GaussDB,成SACC2021最靓那一个…
    云小课 | 玩转HiLens Studio之手机实时视频流调试代码
    浅析决策树的生长和剪枝
    OCR性能优化:从认识BiLSTM网络结构开始
    520特辑丨码神VS爱神:盘点程序员的四大男友力,你偏爱哪一种?
    jQuery 筛选方法
    jQuery 选择器
    jQuery 基础知识
    JavaScript 小工具
    JavaScript Event
  • 原文地址:https://www.cnblogs.com/huwei0814/p/3840387.html
Copyright © 2011-2022 走看看