单例模式是一种常用的设计模式,在应用程序中经常被用到。下面我们以一个简单的例子来介绍单例模式的应用。
假设我们有一个应用程序,该程序需要记录应用程序中所有的日志信息。我们可以定义一个名为 Logger
的类来完成这个任务。由于在应用程序中只需要存在一个 Logger
对象,因此我们可以使用单例模式来实现它。
首先,我们需要定义一个 Logger
类,该类需要具有如下特征:
- 该类不能被继承。
- 该类只能有一个实例。
- 该类的实例需要在第一次被使用时创建。
下面是一个使用单例模式实现的 Logger
类:
public class Logger {
// 用于记录日志信息的列表
private List<String> logs = new ArrayList<>();
// 唯一的 Logger 对象
private static Logger instance;
// 私有的构造函数,防止外部创建对象
private Logger() {
}
// 获取唯一的 Logger 对象
public static synchronized Logger getInstance() {
if (instance == null) {
instance = new Logger();
}
return instance;
}
// 添加日志信息
public void addLog(String log) {
logs.add(log);
}
// 获取日志信息
public List<String> getLogs() {
return Collections.unmodifiableList(logs);
}
}
在上述代码中,我们使用了 private
修饰符将 Logger
的构造函数私有化,防止外部创建该类的实例。同时,我们定义了一个静态的 getInstance()
方法,用于获取 Logger
的唯一实例。在该方法中,我们使用了懒汉式的单例模式,即在第一次使用 getInstance()
方法时创建 Logger
的实例。
在 Logger
类中,我们还定义了 addLog()
和 getLogs()
两个方法,用于添加和获取日志信息。注意,我们在 getLogs()
方法中使用了 Collections.unmodifiableList()
方法来防止外部修改日志信息。
现在,我们可以在应用程序中使用 Logger
类来记录日志信息了。例如:
public class Application {
public static void main(String[] args) {
Logger logger = Logger.getInstance();
logger.addLog("Start the application.");
logger.addLog("User login.");
logger.addLog("User logout.");
logger.addLog("Exit the application.");
List<String> logs = logger.getLogs();
for (String log : logs) {
System.out.println(log);
}
}
}
在上述代码中,我们创建了一个 Logger
对象,使用该对象记录了应用程序中的日志信息,并且通过 getLogs()
方法获取日志信息并输出到控制台中。由于 Logger
类是一个单例模式,因此我们可以保证只存在一个 Logger
对象,并且所有的日志信息都被记录在该对象中。
总之,单例模式可以保证一个类只有一个实例,并且提供全局访问点。它常常被用来管理共享的资源,如日志、配置文件等。