Java单例设计模式实例

时间:2020-02-23 14:37:15  来源:igfitidea点击:

众所周知,设计模式是为解决特定问题而创建的。单例解决了只创建一个类的一个对象的问题。单例设计模式是最流行的设计模式之一,它限制任何类只能有一个对象。这个物体可以在任何需要的地方使用。在某些情况下,我们只需要一个类对象,比如对于数据库连接,我们只需要一个对象来处理每个与查询相关的数据库,而不是每次都创建新的对象。我们只创建一个数据库连接对象,并为其分配全局访问权限,以便可以在任何地方访问它。

带急初始化的单例设计模式

顾名思义, 急切初始化意味着一个类的实例在实际需要之前就被创建了。主要是在系统启动时完成。在一个急于初始化的singleton模式中,不管是否有其他类实际请求它的实例,都会创建单例实例。这种方法效果很好,但有一个缺点。不管是否需要在运行时创建实例。如果这个实例不是一个大对象,并且我们可以忍受它未被使用,那么这是最好的方法。

延迟初始化的单例设计模式

因为 懒初始化我们很清楚,它只是遵循懒惰人的逻辑,他从不做任何事情,直到它的迫切需要,懒惰初始化也是一样。类的对象只在需要时创建,而不是像上面那样。所以,在singleton中,对象只被创建一次,当第一次需要它时。

使用Singleton设计模式的好处

节省内存:很明显,每当我们创建任何类的对象时,它都会占用内存空间,所以创建多个对象意味着内存中占用的空间会更多。由于singleton类可能只有一个对象,所以它可以简单地节省内存。

灵活性:由于实例化过程是由类控制的,所以类可以灵活地改变实例化过程。

这个设计模式是如何工作的

Singleton模式有私有构造函数,我们知道private只能访问它的类。因此,它限制在类之外创建类的对象。

单例模式有静态成员,因为静态成员只在内存中获得一次空间。这个成员包含singleton类的实例。

最后,Singleton模式有一个静态工厂方法,它提供对单例对象的全局访问。它负责将对象返回给调用者,以便他们可以使用它。

单例设计模式的现实场景

因为我们都很熟悉大学,它的结构,几乎每个人都上过大学的都会参加。在设计大学管理系统时,副校长班将是独生子女。因为一所大学只有一个声音校长,所以副校长的对象不能超过一个。会有员工班,员工可以是老师、牡丹、实验室助理等等。所有这些都可以有多个对象,因为任何大学都有很多教师、牡丹、实验室助理。但是只有一个副总裁,所以我们可以用单例模式来限制它。

Eager Singleton设计模式Java实例

public class EagerSingleton {
    
  //private static member of class which holds the object of the class.
  private static EagerSingleton instance = new EagerSingleton ();
 
    //private constructor
    private EagerSingleton () {
    }
 
  //public method which is responsible making the global access of object  
    public static EagerSingleton get Instance () {
        return instance;
    }
}

Eager Singleton设计模式Java实例

public class Lazy Singleton {
   
  //private static member which will hold the object when initialized
  private static Lazy Singleton instance = null;
 
    //private constructor
    private LazySingleton () {
    }
 
  //While any request comes it checks when object is created already or else it creates
  //return the object 
    public static LazySingleton getInstance () {
        if (instance == null) {
            synchronized (LazySingleton.Class) {
                //Double check
                if (instance == null) {
                    instance = new LazySingleton ();
                }
            }
        }
        return instance;
    }
}