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

     看别人写的设计模式 觉得很好。

     引用别人的 自己就不造轮子了。。。。。

     转载  http://liuqing9382.iteye.com/blog/1441661

    单例模式:
    三个要点:
    1.某个类只能有一个实例。
    2.它必须自行创建这个实例;
    3.它必须自行向外提供这个实例。

    饿汉式:

    public class Singleton{   
      
       private static Singleton singleton = new Singleton ();   
      
       private Singleton (){}   
      
       public Singleton getInstance(){   
      
         return singletion;   
      
       }   
      
    }   
    

     优点:

        1.线程安全
        2.在类加载的同时已经创建好一个静态对象,调用时反应速度快
    缺点:
          资源效率不高,可能getInstance()永远不会执行到,但执行该类的其他静态方法或者加载了该类(class.forName),那么这个实例仍然初始化 
        

    懒汉式: (懒加载的思想,用到才会初始化实例)

    public class Singleton{   
      
    private static Singleton singleton = null;   
      
    public static synchronized Singleton getInstance(){   
      
    if(singleton==null){   
      
    singleton = new Singleton();   
      
    }   
      
    return singleton;   
      
    }   
      
    }   
    

     优点:
    资源利用率高,不执行getInstance()就不会被实例,可以执行该类的其他静态方法
    缺点:
        第一次加载时不够快,多线程使用不必要的同步开销大
    比较:
    饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变。
    懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的,
    推荐使用第一种
      假设多线程访问的时候,线程1在在new Instence() 系统分配内存需要0.01秒时间 ,但就这这个0.01秒 又有其他的线程访问了,这时候就要再次instance 还是为null  又要再次new

      导致了线程不安全。

    双重检测:

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

    优点:
    资源利用率高,不执行getInstance()就不被实例,可以执行该类其他静态方法
    缺点:
        第一次加载时反应不快,由于java内存模型一些原因偶尔失败

    静态内部类:

    class Singleton5 {   
    private Singleton5() {}   
         private static class SingletonHelp {   
    static Singleton5 instance = new Singleton5();   
    }   
    public static Singleton5 getInstance() {   
        return SingletonHelp.instance;   
    }   
    }  
    

    优点:
        资源利用率高,不执行getInstance()不被实例,可以执行该类其他静态方法
    缺点:
        第一次加载时反应不够快


     


     

  • 相关阅读:
    【转】Install libimobiledevice on Mac OSX
    【转】Mac端包管理工具——Homebrew简介及安装
    Appium的安装-Mac平台(命令行 & dmg)
    【转】NO.3、python+appium+ios,遍历真机元素,得到webview
    【转】NO.2、Appium之IOS第一个demo
    【转】NO.1、 appium之ios环境搭建
    如何在 iOS 真机运行 Appium
    【转】adb shell dumpsys 命令
    Mac下抓包工具charles及破解方法
    2017.08 笔记
  • 原文地址:https://www.cnblogs.com/xilinch/p/2670468.html
Copyright © 2011-2022 走看看