一、 实验目的与要求
1.练习使用单例模式。设计相关的模拟场景并进行实施,验证模式特性,掌握其优缺点。
2.实验结束后,对相关内容进行总结。
二、实验内容
1.模式应用场景说明
在山区或者边远地区火车站往往只有一个窗口在买票,但是可以拍两个队,相互交替进行车票的打印工作。一个人自能买到一张票,并且只可以安排队顺序进行购买。
2.应用场景类图
3.实现代码与解释
3.1 自定义异常类TicketWindowException
package 单例模式;public class TicketWindowException extends Exception {public TicketWindowException(String message) {super(message);}
}
3.2单例类 TicketWindowSingleton 排队买票
package 单例模式;public class TicketWindowSingleton {private static TicketWindowSingleton instance=null;private TicketWindowSingleton() {}public static TicketWindowSingleton getInstance()throws TicketWindowException{if(instance==null) {System.out.println("开辟一个售票窗口");instance=new TicketWindowSingleton();}else {throw new TicketWindowException("售票窗口正在工作中");}return instance;}public void manageJobs() {System.out.println("管理排队任务");}}
3.3客户端测试类 Client
package 单例模式;public class Client {public static void main(String a[]) {TicketWindowSingleton ps1,ps2;try {ps1=TicketWindowSingleton.getInstance();ps1.manageJobs();}catch(TicketWindowException e) {System.out.println(e.getMessage());}System.out.println("------------------------------");try {ps2=TicketWindowSingleton.getInstance();ps2.manageJobs();}catch(TicketWindowException e) {System.out.println(e.getMessage());}}}
4.结果及分析
三、实验总结
优点:.在单例模式中,活动的单例只有一个实例,对单例类的所有实例化得到的都是相同的一个实例。这样就 防止其它对象对自己的实例化,确保所有的对象都访问一个实例
缺点:.不适用于变化的对象,如果同一类型的对象总是要在不同的用例场景发生变化,单例就会引起数据的错误,不能保存彼此的状态。