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