zoukankan      html  css  js  c++  java
  • 单例模式

    模式介绍

    单例模式(Singleton Pattern)属于创建型模式,在整个软件运行系统中,对于某个类,只能存在一个对象实例。

    模式优点

    1、在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例。

    模式缺点

    1、没有接口,不能继承,一个类应该只关心内部逻辑,而不关心外面怎么样来实例化。

    使用场景

    1、创建时耗时多、耗费资源多但又经常用到的对象,例如工具类对象、频繁访问数据库、文件读写的对象等。

    系统建模

    1、下面介绍几种单例模式,大体分为饿汉式和懒汉式两种。

    系统实现

    饿汉式(一)

    /**
     * 饿汉式(一)
     * 优点:线程安全。
     * 缺点:没有起到Lazy Loading效果。
     * 总结:这种单例模式可用,但是可能造成内存浪费。
     */
    class SingleTon {
        private SingleTon(){};
        private final static SingleTon singleTon = new SingleTon();
        public static SingleTon getInstance(){
            return singleTon;
        }
    }
    

    饿汉式(二)

    /**
     * 饿汉式(二)
     * 优点:线程安全。
     * 缺点:没有起到Lazy Loading效果。
     * 总结:这种单例模式可用,但是可能造成内存浪费。
     */
    class SingleTon {
        private SingleTon(){};
        private final static SingleTon singleTon ;
        static{
            singleTon = new SingleTon();
        }
        public static SingleTon getInstance(){
            return singleTon;
        }
    }
    

    懒汉式(一)

    /**
     * 懒汉式(一)
     * 优点:起到Lazy Loading效果。
     * 缺点:线程不安全。
     * 总结:实际开发中不可使用。
     */
    class SingleTon {
        private SingleTon(){};
        private static SingleTon singleTon ;
        public static SingleTon getInstance(){
            if(singleTon == null){
                singleTon = new SingleTon();
            }
            return singleTon;
        }
    }
    

    懒汉式(二)

    /**
     * 懒汉式(二)
     * 优点:起到Lazy Loading效果,线程安全。
     * 缺点:每次获取对象都要上锁,效率太低了。
     * 总结:实际开发中不可使用。
     */
    class SingleTon {
        private SingleTon(){};
        private static SingleTon singleTon ;
        public static synchronized SingleTon getInstance(){
            if(singleTon == null){
                singleTon = new SingleTon();
            }
            return singleTon;
        }
    }
    

    懒汉式(三)

    /**
     * 懒汉式(三)
     * 优点:起到Lazy Loading效果。
     * 缺点:线程不安全,有可能实例化多个实例。
     * 总结:实际开发中不可使用。
     */
    class SingleTon {
        private SingleTon(){};
        private static SingleTon singleTon ;
        public static SingleTon getInstance(){
            if(singleTon == null){
                synchronized (SingleTon.class){
                    singleTon = new SingleTon();
                }
            }
            return singleTon;
        }
    }
    

    懒汉式(四)

    /**
     * 懒汉式(四)
     * 优点:起到Lazy Loading效果,线程安全。
     * 缺点:无
     * 总结:实际开发中可以使用。
     */
    class SingleTon {
        private SingleTon(){};
        private static volatile SingleTon singleTon ;
        public static SingleTon getInstance(){
            if(singleTon == null){
                synchronized (SingleTon.class){
                    if(singleTon == null){
                        singleTon = new SingleTon();
                    }
                }
            }
            return singleTon;
        }
    }
    

    懒汉式(五)

    /**
     * 懒汉式(五)
     * 优点:静态内部类只会加载一次,起到Lazy Loading效果,线程安全。
     * 缺点:无
     * 总结:实际开发中可以使用。
     */
    class SingleTon {
        private SingleTon(){};
        private static class SingleTonInstance{
            private static final SingleTon INSTANCE = new SingleTon();
        }
        public static SingleTon getInstance(){
            return SingleTonInstance.INSTANCE;
        }
    }
    

    懒汉式(六)

    /**
     * 枚举方式
     * 优点:线程安全。
     * 缺点:无
     * 总结:实际开发中可以使用。
     */
    enum  SingleTon {
        INSTANCE;
        public void doSomethings(){
            System.out.println("嘿嘿嘿!");
        }
    }
    
  • 相关阅读:
    HSF的原理分析
    python--cryptography加密
    PyQt5--QTDesigner--UI资源
    PyQt5--QTDesigner--UI样式表
    python--struct
    python--ffmpy3与ffmpeg
    python--you-get:视频下载
    python--base64--简单的加密和解密
    python--StringIO-在内存中读写str
    电脑技巧
  • 原文地址:https://www.cnblogs.com/feiqiangsheng/p/12050321.html
Copyright © 2011-2022 走看看