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()不被实例,可以执行该类其他静态方法
    缺点:
        第一次加载时反应不够快


     


     

  • 相关阅读:
    PIL 和 pythonopencv 从内存字节码中读取图片并转为np.array格式
    【转载】 什么是元类
    【转载】 Py之cupy:cupy的简介、安装、使用方法之详细攻略
    【转载】 vscode如何在最新版本中配置c/c++语言环境中的launch.json和tasks.json?
    【转载】 Ubuntu下使用VSCode的launch.json及tasks.json编写
    Javascript高级程序设计第二版第六章面向对象程序设计(ObjectOriented Programming)简称OOP编程笔记
    Javascript高级程序设计第二版第五章引用类型笔记
    css权重简单之谈
    编辑神器VIM下安装zencoding
    显示层3s后隐藏
  • 原文地址:https://www.cnblogs.com/xilinch/p/2670468.html
Copyright © 2011-2022 走看看