zoukankan      html  css  js  c++  java
  • Singleton

    单例模式(Singleton) 对应的慕课视频:https://www.imooc.com/video/1772

    单例设计模式用于保证一个类只有一个实例

    他有两种表现形式:懒汉式,饿汉式

    饿汉式和懒汉式最明显的区别就是两者对象实例化的时间不相同。

    恶汉式是在类加载的时候就创建,懒汉式是在调用实例的时候在加载。

    下面来看一下饿汉式的基本代码

    package songyan.demo;
    
    //单例模式:保证一个类的实例只有一个
    /**
     * 单例设计模式-饿汉式
     * @author Administrator
     *
     */
    public class singleton {
        //隐藏构造函数
        private singleton(){
            }
        
        //创建该类的对象
        private static singleton instance = new singleton();
        
        //提供反复问内部实例的方法
        public static  singleton getInstance()
        {
            return instance;
        }
    }

    饿汉式编写顺序:

    隐藏构造函数(将构造函数私有化,防止在类的外部创建对象)

    创建该类的对象(private static)

    对外提供访问这个对象的方法

    懒汉式的实现

    package test;
    
    /**
     * author:songyan
     * date: 2019/11/10
     **/
    public class SingletonDemo2 {
        private static SingletonDemo2 singletonDemo2 = null;
        public SingletonDemo2 getInstance(){
            if(singletonDemo2==null)
                singletonDemo2 = new SingletonDemo2();
            return singletonDemo2;
        }
        private SingletonDemo2(){}
    }

    懒汉式的编写顺序与饿汉式相同,不同的是对象实例化的时间,在懒汉式中,是在访问该对象的时候将对象实例化的。

    再来比较一下两种实现方式

    1,饿汉式在加载类的时候比较慢,但是在运行的时候比较快。(懒汉式相反)

    2,饿汉式是线程安全的,而懒汉式是线程安全的

    懒汉式的线程安全是可以解决的,可以通过同步代码块或者同步函数来实现,同步代码块要比同步函数更优一些(同步函数的范围太大,同步了不必要的部分,可以使用同步函数仅同步局部即可)

    当然使用同步的方式解决多线程的安全问题也是有弊端的,他会降低程序执行的效率,所以在开发过程中更多的是使用饿汉式的实现方式

    线程安全的懒汉式

    package test;
    
    /**
     * author:songyan
     * date: 2019/11/10
     **/
    public class SingletonDemo2 {
        private static SingletonDemo2 singletonDemo2 = null;
        public SingletonDemo2 getInstance(){
            synchronized (this){
                if(singletonDemo2==null)
                    singletonDemo2 = new SingletonDemo2();
                return singletonDemo2;
            }
        }
        private SingletonDemo2(){}
    }
  • 相关阅读:
    【C++札记】友元
    【C++札记】const关键字
    【C++札记】实现C++的string类
    【C++札记】拷贝构造函数,浅拷贝和深拷贝
    【C++札记】内联函数
    【C++札记】函数重载
    文章博客导航
    【C++札记】标准输入与输出
    毕业季,学子们又把翟天临推上了热搜!
    【底层原理】高级开发必须懂的"字节对齐"
  • 原文地址:https://www.cnblogs.com/excellencesy/p/8856221.html
Copyright © 2011-2022 走看看