zoukankan      html  css  js  c++  java
  • java 设计模式 ---- 饿汉 , 懒汉

    * 单例设计模式:保证类在内存中只有一个对象。

    * 如何保证类在内存中只有一个对象呢?
    * (1)控制类的创建,不让其他类来创建本类的对象。private
    * (2)在本类中定义一个本类的对象。Singleton s;
    * (3)提供公共的访问方式。 public static Singleton getInstance(){return s}
    * 单例写法两种:
    * (1)饿汉式 开发用这种方式。

    * 
    //饿汉式
    class Singleton {
    //1,私有构造函数
    private Singleton(){}
    //2,创建本类对象
    private static Singleton s = new Singleton();
    //3,对外提供公共的访问方法
    public static Singleton getInstance() {
    return s;
    }
    
    public static void print() {
    System.out.println("11111111111");
    }
    }
    * (2)懒汉式 面试写这种方式。多线程的问题?
    * 
    //懒汉式,单例的延迟加载模式
    class Singleton {
    //1,私有构造函数
    private Singleton(){}
    //2,声明一个本类的引用
    private static Singleton s;
    //3,对外提供公共的访问方法
    public static Singleton getInstance() {
    if(s == null)
    //线程1,线程2
    s = new Singleton();
    return s;
    }
    
    public static void print() {
    System.out.println("11111111111");
    }
    }
    * (3)第三种格式
    * 
    class Singleton {
    private Singleton() {}
    
    public static final Singleton s = new Singleton();//final是最终的意思,被final修饰的变量不可以被更改
        /**
         * @param args
         * * 单例设计模式:保证类在内存中只有一个对象。
         */
        public static void main(String[] args) {
            //Singleton s1 = new Singleton();
            
            Singleton s1 = Singleton.s;                //成员变量被私有,不能通过类名.调用
            //Singleton.s = null;
            Singleton s2 = Singleton.s;
            
            System.out.println(s1 == s2);
            
        /*    Singleton s1 = Singleton.getInstance();
            Singleton s2 = Singleton.getInstance();
            
            System.out.println(s1 == s2);*/
        }
    
    }
    
    /*
     * 饿汉式
     
    class Singleton {
        //1,私有构造方法,其他类不能访问该构造方法了
        private Singleton(){}
        //2,创建本类对象
        private static Singleton s = new Singleton();
        //3,对外提供公共的访问方法
        public static Singleton getInstance() {                //获取实例
            return s;
        }
    }*/
    /*
     * 懒汉式,单例的延迟加载模式
     */
    /*class Singleton {
        //1,私有构造方法,其他类不能访问该构造方法了
        private Singleton(){}
        //2,声明一个引用
        private static Singleton s ;
        //3,对外提供公共的访问方法
        public static Singleton getInstance() {                //获取实例
            if(s == null) {
                //线程1等待,线程2等待
                s = new Singleton();
            }
            
            return s;
        }
    }*/
    /*
     * 饿汉式和懒汉式的区别
     * 1,饿汉式是空间换时间,懒汉式是时间换空间
     * 2,在多线程访问时,饿汉式不会创建多个对象,而懒汉式有可能会创建多个对象
     */
    
    class Singleton {
        //1,私有构造方法,其他类不能访问该构造方法了
        private Singleton(){}
        //2,声明一个引用
        public static final Singleton s = new Singleton();
        
    }
  • 相关阅读:
    梦断代码第8章总结
    <<梦断代码>>读后感
    站立会议第四篇
    购买一批书的最低价格
    NABCD分析
    首尾相连的二维数组求最大字数组的和
    站立会议第三篇
    站立会议第二篇
    站立会议第一篇
    牛客算法周周练16D Rinne Loves Dynamic Graph(分层图最短路 + 堆优化dijkstra)
  • 原文地址:https://www.cnblogs.com/yimian/p/6566019.html
Copyright © 2011-2022 走看看