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