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

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

 


软件设计模式之单例模式-----身份证号码---打印池_第1张图片

 

 

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

软件设计模式之单例模式-----身份证号码---打印池_第2张图片

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

 

你可能感兴趣的:(软件设计体系,设计模式)