【实验内容和要求】
在操作系统中,打印池(Print Spooler)是一个用于管理打印任务的应用程序,通过打印池用户可以删除、中止或者改变打印任务的优先级,在一个系统中只允许运行一个打印池对象,如果重复创建打印池则抛出异常。现使用单例模式来模拟实现打印池的设计。用JAVA语言实现(C#控制台应用程序实现)该模式。绘制该模式的UML图。
一、实验目的:
1) 掌握单例模式(Singleton)的特点
2) 分析具体问题,使用单例模式进行设计。
二、实验环境:
Eclipse
三、实验内容:
【模式UML图】
【模式代码(JAVA语言实现)】
class PrintSpoolerSingleton {
private static PrintSpoolerSingleton instance = null;
// 私有化构造方法,外界无法通过new创建此类的实例
private PrintSpoolerSingleton(){};
//静态工厂方法 synchronized 同步方法加锁,保证每次只有一个线程进入
public static synchronized PrintSpoolerSingleton getInstance() {
if (instance == null) {
System.out.println("创建打印池!");
instance = new PrintSpoolerSingleton();
} else {
System.out.println("打印池正在工作中!");
}
return instance;
}
}
public class Singleton {
public static void main(String a[]) {
PrintSpoolerSingleton ps1 = null, ps2 = null;
ps1.getInstance();
ps2.getInstance();
}
}
【运行截图】
四、心得体会:
单例模式主要适用于以下情况:
1)确保一个类仅有一个唯一的实例,并且提供一个全局的访问点