单例设计模式

概述

         有时候某些对象我们只需要一个,如:线程池、缓存、对话框等等,对于这类对象我们只能有一个实例

        单例模式确保一个类只有一个实例,并且自行实例化并向整个系统提供这个实例

 特点

         1 只能有一个实例    2 类自己创建自己的唯一实例    3 给所有其他对象提供这一实例

饿汉式

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

懒汉式

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

        饿汉式单例类在自己被加载时就将自己实例化,即便加载器是静态的。单从资源利用效率角度来讲,这个比懒汉式单例类稍差。从速度和反映时间来讲,比饿汉式单例好,

         在Java语言内,Java.lang.Runtime对象就是一个使用单例模式的例子,在每个Java应用程序里,都有一个唯一的Runtime对象。通过这个对象程序可以与运行环境发生相互作用

四、模式优缺点                                                                                                     

           优点

              一、节约了系统资源。由于系统中只存在一个实例对象,对与一些需要频繁创建和销毁对象的系统而言,单

例模式无疑节约了系统资源和提高了系统的性能。

             二、因为单例类封装了它的唯一实例,所以它可以严格控制客户怎样以及何时访问它。

         缺点

             一、由于单例模式中没有抽象层,因此单例类的扩展有很大的困难。

             二、单例类的职责过重,在一定程度上违背了“单一职责原则”。

           五、模式使用场景                                                                                             

           下列几种情况可以使用单例模式。

              一、系统只需要一个实例对象,如系统要求提供一个唯一的序列号生成器,或者需要考虑资源消耗太大而只允许创建一个对象。

             二、客户调用类的单个实例只允许使用一个公共访问点,除了该公共访问点,不能通过其他途径访问该实例。

           六、总结                                                                                                           

           1. 单例模式中确保程序中一个类最多只有一个实例。

           2. 单例模式的构造器是私有了,而且它必须要提供实例的全局访问点。

           3. 单例模式可能会因为多线程的问题而带来安全隐患。

原文地址:https://www.cnblogs.com/whesuanfa/p/7373377.html