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


     


     

  • 相关阅读:
    添加或删除项并动态记录项的值
    练习题。对DOM中document的深刻理解巩固
    document--文档中的操作,操作属性、操作样式、操作元素
    10.13DOM中document--文档1找到元素的方法,还有元素内容属性
    函数的定义,语法,二维数组,几个练习题
    10.11讲的内容总结
    js基础巩固练习
    10.9做的一个静态页面(巩固前面的内容)
    9.29学习的js基础
    9.28做的作业(企业名称静态网页)
  • 原文地址:https://www.cnblogs.com/xilinch/p/2670468.html
Copyright © 2011-2022 走看看