• 单例模式


    Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍两种:懒汉式单例、饿汉式单例。
      单例模式有以下特点:
      1、单例类只能有一个实例。
      2、单例类必须自己创建自己的唯一实例。
      3、单例类必须给所有其他对象提供这一实例。

    一、懒汉式单例

    //懒汉式单例类.在第一次调用的时候实例化自己   

    public class Singleton {  

      private Singleton() {}  

      private static Singleton single=null;  

      //静态工厂方法   

      public static Singleton getInstance() {  

           if (single == null) {    

               single = new Singleton();  

           }    

          return single;  

      }  

    Singleton通过将构造方法限定为private避免了类在外部被实例化,

    在同一个虚拟机范围内,Singleton的唯一实例只能通过getInstance()方法访问。

     

    二、饿汉式单例

    public class Singleton1 {

    private static Singleton1 instance = null;

    static {

    instance = new Singleton1();

    }

     

    private Singleton1(){

     

    }

     

    public static Singleton1 getInstance(){

    return instance;

    }

    }

    饿汉式在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变,所以天生是线程安全的。 

     

     

    //饿汉式单例类不能实现延迟加载,不管将来用不用始终占据内存;

    //懒汉式单例类线程安全控制烦琐,而且性能受影响。

    //Initialization Demand Holder (IoDH)

    //在IoDH中,我们在单例类中增加一个静态(static)内部类,既实现了线程安全,又避免了同步带来的性能影响。

    //在该内部类中创建单例对象,再将该单例对象通过getInstance()方法返回给外部使用

     

    public class SingletonIniti {

            private SingletonIniti() {

            

            }

            private static class SingletonHolder {

                    private static final SingletonIniti INSTANCE = new SingletonIniti();

             }

            

            public static SingletonIniti getInstance() {

                    return SingletonHolder.INSTANCE;

            }

            

            public static void main(String args[]) {

            SingletonIniti s1, s2; 

                s1 = SingletonIniti.getInstance();

                s2 = SingletonIniti.getInstance();

                System.out.println(s1==s2);

            }

    }

     

    打印的结果

     

  • 相关阅读:
    张照行 的第九次作业
    张照行 的第八次作业
    Learning by doing
    张照行 的第七次作业
    张照行 的第六次作业
    Java第七次作业
    java第五次作业
    Java第七次作业
    Java第六次课后作业
    第五次Java作业
  • 原文地址:https://www.cnblogs.com/hmzxwky/p/6016533.html
Copyright © 2020-2023  润新知