当前位置: 代码迷 >> 综合 >> 软件设计模式之单例模式-----身份证号码---打印池
  详细解决方案

软件设计模式之单例模式-----身份证号码---打印池

热度:45   发布时间:2024-02-10 18:24:26.0

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

 


 

 

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());}}
}