Java单例模式

Java单例模式

单例(Singleton)模式是Java中最简单的设计模式之一。这种类型的设计模式属于创建模式,因为此模式提供了创建对象的最佳方法之一。

这种模式涉及一个类,它负责创建一个对象,同时确保只创建一个对象。这个类提供了一种方法来访问它的唯一对象,可以直接访问,而不需要实例化类的对象。

实现实例

我们将创建一个单一对象类 -- SingleObject。单个对象(SingleObject)类的构造函数是私有的,并且具有自身的静态实例。

SingleObject类提供了一个静态方法来获取其静态实例到外部。SingletonPatternDemo或示例类将使用SingleObject类来获取SingleObject对象。

一、饿汉式

第1步

创建一个Singleton类

SingleObject.java

public class SingleObject {

   //创建私有化的类属性指向实例化对象
   private static SingleObject instance = new SingleObject();

   
   //私有化构造方法,使得该类无法被外部实例化
   private SingleObject(){}

   //返回私有化的类属性指向的对象
   public static SingleObject getInstance(){
      return instance;
   }

   public void showMessage(){
      System.out.println("Hello World!");
   }
}

第2步

从单例类中获取唯一的对象。

SingletonPatternDemo.java

public class SingletonPatternDemo {
   public static void main(String[] args) {

      //SingleObject类不再提供外部实例化功能下面这句会报错
      
      //SingleObject object = new SingleObject();

      //只能通过getInstance()获取实例化对象
      SingleObject object = SingleObject.getInstance();

      //打印消息
      object.showMessage();
   }
}

第3步

验证输出,得到结果如下 -

Hello World!

二、懒汉式

第1步

创建一个Singleton类

SingleObject.java

public class SingleObject {

   //创建私有化的类属性,用于指向实例化对象,暂时为空
   private static SingleObject instance;

   
   //私有化构造方法,使得该类无法被外部实例化
   private SingleObject(){}

   //设计类方法返回私有化的类属性指向的对象
   public static SingleObject getInstance(){
   //第一次访问的时候,判断是否为空,为空就指向实例化对象
      if(null == instance){
          instance = new SingleObject();
      }
      return instance;
   }

   public void showMessage(){
      System.out.println("Hello World!");
   }
}

第2步

从单例类中获取唯一的对象。

SingletonPatternDemo.java

public class SingletonPatternDemo {
   public static void main(String[] args) {

      //SingleObject类不再提供外部实例化功能下面这句会报错
      
      //SingleObject object = new SingleObject();

      //只能通过getInstance()获取实例化对象
      SingleObject object = SingleObject.getInstance();

      //打印消息
      object.showMessage();
   }
}

第3步

验证输出,得到结果如下 -

Hello World!

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Copyright bcfou.com.Some Rights Reserved.