• 单例模式


      单例模式(单件模式),是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例,即一个类只有一个对象实例。《设计模式:可复用面向对象软件的基础》一书中对单例模式的适用性的描述如下:

    1、当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。
    2、当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。

      延迟加载机制(lazy loading),是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。

    Java中单例模式的几种写法

    1.懒汉式

    当程序第一次访问单例模式实例时才进行创建。(单例模式的实例在系统中很少用到时,推荐使用懒汉式)

    (1)延迟加载,线程不安全

    public class Single {
        private Single(){};
        private static Single instance;
        public static Single getInstance(){
            if(instance==null){
                instance=new Single();
            }
            return instance;
        }
    }
    View Code

    (2)延迟加载,线程安全

    public class Single {  
        private Single (){}
        private static Single instance; 
        public static synchronized Single getInstance() {  
            if (instance == null) {  
                instance = new Single();  
            }  
            return instance;  
        }  
    }
    View Code

    2.饿汉式

    在程序启动或单例模式类被加载的时候,单例模式实例就已经被创建。(单例模式的实例在系统中经常用到时,推荐使用饿汉式)

    (1)线程安全

    public class Single {  
        private static Single instance = new Single();  
        private Single (){};
        public static Single getInstance() {  
            return instance;  
        }  
    } 
    View Code

    3.枚举法

    (1)线程安全,可防止反序列化重新创建新的对象

    public enum Single {
        Single;
        private Single() {}
        public void print(){
            System.out.println("hello world");
        }
    }
    
    public class SingleTest {
        public static void main(String[] args) {
            Single single=Single.Single;
            single.print();
        }
    }
    View Code

    4.静态内部类

    (1)延迟加载,线程安全

    public class Single {  
        private static class SingleHolder {  
            private static final Single INSTANCE = new Single();  
        }  
        private Single (){}
        public static final Single getInstance() {  
            return SingleHolder.INSTANCE;  
        }  
    }
    View Code

     单例模式的一些应用场景

    1.Windows的任务管理器

    2.Windows的回收站

    3.网站的访问计数器

    4.数据库的连接池

    5.多线程的线程池

    6.操作系统的文件系统

    7.应用程序的日志应用,共享的日志文件只能由一个实例去操作,否则内容不好追加。

    总结以上,单例模式应用的场景一般为:

    (1)资源共享的情况下,避免由于资源操作时导致的性能或损耗等。

    (2)控制资源的情况下,方便资源之间的互相通信,如线程池等。

     

    本文借鉴:

      http://www.blogjava.net/kenzhh/archive/2013/03/15/357824.html

      http://blog.csdn.net/tanyujing/article/details/14160941

    文章仅供参考,转载请注明出处。
    不怕千万人阻挡,只怕自己投降。
  • 相关阅读:
    移动端touch事件获取事件坐标
    详解webpack中的hash、chunkhash、contenthash区别
    textarea placeholder 设置主动换行
    js-xlsx的使用
    关于Blob对象的介绍与使用
    spring boot zuul集成kubernetes等第三方登录
    Spring Boot 获取yaml配置文件信息
    spring boot @Value源码解析
    java.lang.StackOverflowError解决
    Jpa 重写方言dialect 使用oracle / mysql 数据库自定义函数
  • 原文地址:https://www.cnblogs.com/jakeylove3/p/7761233.html
Copyright © 2020-2023  润新知