单例图案是Java中最简单的设计模式之一。这种类型的设计模式属于创建模式,因为此模式提供了创建对象的最佳方法之一。
此模式涉及一个单个类,该类负责创建一个对象,同时确保仅创建单个对象。此类提供了一种访问其唯一可以直接访问的对象的方法,而无需实例化类的对象。
例子:
假设您有考试,您需要使用计算器,但是您没有一个。因此,您去市场购买计算器,然后在考试中使用它。下次您有另一个需要计算器的考试时,您将不会购买新的考试。您将使用旧的。这样,您可以省钱。单例图案以类似的方式工作。
代码示例:
calculator.java
public class Calculator {
static Calculator single_instance = null;
private Calculator(){};
static Calculator create_instance(){
if(single_instance == null)
{
single_instance = new Calculator();
}
return single_instance;
}
void printCalculator(){
System.out.println("Calculator Used");
}
}
mainActivity.java
import java.util.*;
public class MainActivity {
public static void main(String[] args) {
Calculator c1 = Calculator.create_instance();
c1.printCalculator();
}
}
解释:
单例设计模式是确保类只有一个实例并提供全球访问点的一种方式。使用这种模式的好处是,它可以节省内存,避免同步问题并允许对实例进行集中控制。
您显示的代码是使用静态工厂方法和私有构造函数在Java中实现单例模式的示例。静态出厂方法(create_instance())返回计算器类的单个实例,而私有构造函数则防止其他类创建计算器的新实例。静态字段(single_instance)是计算器的唯一实例,并且是懒惰的,这意味着仅在需要时创建它。
该代码通过以下步骤来工作:
-
执行MainActivity类的主要方法时,它将调用计算器类的create_instance()方法。
-
由于此时单_instance字段为null,因此create_instance()方法创建了一个新的计算器对象并将其分配给single_instance。
-
然后,create_instance()方法将单_instance对象返回到主方法,将其分配给本地变量C1。
-
然后,主要方法调用C1上的printcalculator()方法,该方法将使用用于控制台的计算器。
-
如果主要方法再次调用create_instance()方法,它将不会创建一个新的计算器对象,而是返回存储在single_instance中的现有一个。这确保了整个程序中仅存在一个计算器实例。