谁给我一个身份证号码:软件设计模式之单例模式-----身份证号码---打印池

实例一:身份证号码 在现实生活中,居民身份证号码具有唯一性,同一个人不允许有多个身份证号码,第一次申请身份证时将给居民分配一个身份证号码,如果之后因为遗失等原因补办时,还是使用原来的身份证号码,不会产生新的号码。现使用单例模式模拟该场景

 


 

 

public class IdentityCardNo{private static IdentityCardNo instance=null;private String no;private IdentityCardNo(){}public static IdentityCardNo getInstance(){if(instance==null){System.out.println("第一次办理身份证,分配新号码!"); instance=new IdentityCardNo(); instance.setIdentityCardNo("No400011112222");}else{System.out.println("重复办理身份证,获取旧号码!"); }return instance;}private void setIdentityCardNo(String no){ this.no=no;}public String getIdentityCardNo(){return this.no;}} public class Client{public static void main(String a[]){ IdentityCardNo no1,no2; no1=IdentityCardNo.getInstance(); no2=IdentityCardNo.getInstance(); System.out.println("身份证号码是否一致:" + (no1==no2)); String str1,str2; str1=no1.getIdentityCardNo(); str2=no1.getIdentityCardNo(); System.out.println("第一次号码:" + str1); System.out.println("第二次号码:" + str2); System.out.println("内容是否相等:" + str1.equalsIgnoreCase(str2)); System.out.println("是否是相同对象:" + (str1==str2));}}

 

实例二:打印池 在操作系统中,打印池(Print Spooler)是一个用于管理打印任务的应用程序,通过打印池用户可以删除、中止或者改变打印任务的优先级,在一个系统中只允许运行一个打印池对象,如果重复创建打印池则抛出异常。现使用单例模式来模拟实现打印池的设计。

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 void manageJobs(){ System.out.println("管理打印任务!");}}

 

public class PrintSpoolerException extends Exception {public PrintSpoolerException(String message) {super(message);}}

 

public class Client{public static void main(String a[]){ PrintSpoolerSingleton ps1,ps2; try { ps1=PrintSpoolerSingleton.getInstance(); ps1.manageJobs(); } catch(PrintSpoolerException e) { System.out.println(e.getMessage()); } System.out.println("--------------------------"); try { ps2=PrintSpoolerSingleton.getInstance(); ps2.manageJobs(); } catch(PrintSpoolerException e) { System.out.println(e.getMessage()); }}}

 

相关推荐

相关文章