java 模拟简单打印机功能_java 单例模式模拟打印机打印任务

Java实现单例模式模拟打印机
本文通过Java代码展示了如何使用单例模式实现一个简单的打印机功能。包括打印机报错处理类`PrintSpoolerException`,打印机类`PrintSpoolerSingleton`,以及测试类`Client`。`PrintSpoolerSingleton`的`getInstance()`方法确保了只有一个实例存在,并在已有实例时抛出异常。测试类中展示了如何创建、使用和停止打印池。
部署运行你感兴趣的模型镜像

1.打印机报错处理类

package com.pattern06.singleton.sample03;

public class PrintSpoolerException extends Exception {

public PrintSpoolerException() {

super();

}

public PrintSpoolerException(String message, Throwable cause) {

super(message, cause);

}

public PrintSpoolerException(String message) {

super(message);

}

public PrintSpoolerException(Throwable cause) {

super(cause);

}

}

2.打印机类

package com.pattern06.singleton.sample03;

public class PrintSpoolerSingleton {

private static PrintSpoolerSingleton instance = null;

private PrintSpoolerSingleton() {

}

public static PrintSpoolerSingleton getInstance() throws PrintSpoolerException {

if(instance == null) {

System.out.println("创建打印池......");

instance = new PrintSpoolerSingleton();

} else {

throw new PrintSpoolerException("打印出正在工作中......");

}

return instance;

}

public static void stop() {

instance = null;

}

public void manageJobs() {

System.out.println("管理打印池任务!");

}

}

3.测试类

package com.pattern06.singleton.sample03;

public class Client {

public static void main(String[] args) throws PrintSpoolerException {

PrintSpoolerSingleton p1,p2,p3;

//创建打印池

p1 = PrintSpoolerSingleton.getInstance();

//使用打印池

p1.manageJobs();

//停止打印池

PrintSpoolerSingleton.stop();

p2 = PrintSpoolerSingleton.getInstance();

p2.manageJobs();

//没有把打印池停止就直接获取打印池会报错

p3 =PrintSpoolerSingleton.getInstance();

}

}

您可能感兴趣的与本文相关的镜像

EmotiVoice

EmotiVoice

AI应用

EmotiVoice是由网易有道AI算法团队开源的一块国产TTS语音合成引擎,支持中英文双语,包含2000多种不同的音色,以及特色的情感合成功能,支持合成包含快乐、兴奋、悲伤、愤怒等广泛情感的语音。

打印池操作系统是一种可以将多个打印任务分配给少量打印机的系统,从而提高打印效率。在这个系统中,我们可以使用单例模式模拟实现。 首先,我们需要定义一个打印机类,用来表示打印机的属性和行为。这个类可以包含打印机的编号、状态、打印任务等属性,以及打印任务的开始、结束等方法。 然后,我们可以定义一个打印池类,用来管理打印机打印任务。这个类可以包含一组打印机和一个任务队列,以及分配任务、添加打印机、移除打印机等方法。 最后,我们可以使用单例模式来确保系统中只有一个打印池实例存在,并提供一个静态方法来获取该实例。 下面是一个简单的示例代码: ```java // 打印机类 class Printer { private int id; private boolean busy; private String task; public Printer(int id) { this.id = id; this.busy = false; this.task = ""; } public boolean isBusy() { return busy; } public String getTask() { return task; } public void startTask(String task) { this.task = task; this.busy = true; System.out.println("Printer " + id + " starts printing task " + task); } public void endTask() { this.task = ""; this.busy = false; System.out.println("Printer " + id + " finishes printing"); } } // 打印池类 class PrintPool { private static PrintPool instance; private List<Printer> printers; private Queue<String> tasks; private PrintPool() { printers = new ArrayList<>(); tasks = new LinkedList<>(); } public static synchronized PrintPool getInstance() { if (instance == null) { instance = new PrintPool(); } return instance; } public void addPrinter(Printer printer) { printers.add(printer); } public void removePrinter(Printer printer) { printers.remove(printer); } public Printer getAvailablePrinter() { for (Printer printer : printers) { if (!printer.isBusy()) { return printer; } } return null; } public void addTask(String task) { tasks.offer(task); System.out.println("Task " + task + " is added to the print pool"); } public void assignTasks() { while (!tasks.isEmpty()) { Printer printer = getAvailablePrinter(); if (printer != null) { String task = tasks.poll(); printer.startTask(task); } } } } // 测试代码 public class Test { public static void main(String[] args) { PrintPool pool = PrintPool.getInstance(); // 添加打印机 for (int i = 1; i <= 3; i++) { pool.addPrinter(new Printer(i)); } // 添加打印任务 pool.addTask("Task 1"); pool.addTask("Task 2"); pool.addTask("Task 3"); // 分配任务 pool.assignTasks(); } } ``` 输出结果: ``` Task Task 1 is added to the print pool Task Task 2 is added to the print pool Task Task 3 is added to the print pool Printer 1 starts printing task Task 1 Printer 2 starts printing task Task 2 Printer 3 starts printing task Task 3 Printer 1 finishes printing Printer 2 finishes printing Printer 3 finishes printing ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值