JAVA设计模式之【单例模式】
任务管理器案例
1.单例类
package Singleton;
/**
* Created by Jim on 2016/9/28.
*/
public class TaskManager {
private static TaskManager tm = null;
private TaskManager() {
System.out.println("创建任务管理器");
}
public void displayProcesses() {
System.out.println("显示进程");
}
public void displayServices() {
System.out.println("显示服务");
}
public static TaskManager getInstance() {
if (tm == null) {
tm = new TaskManager();
}
return tm;
}
}
2.客户端
package Singleton;
public class Client
{
public static void main(String args[])
{
try
{
TaskManager tm = TaskManager.getInstance();
tm.displayProcesses();
tm.displayServices();
TaskManager tm2 = TaskManager.getInstance();
tm2.displayProcesses();
tm2.displayServices();
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
}
}
身份证办理案例
1.单例类
package Singleton;
/**
* Created by e550 on 2016/9/29.
*/
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;
}
}
2.客户端类
package Singleton;
public class Client
{
public static void main(String args[])
{
try
{
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));
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
}
}
执行结果:
第一次办理身份证,分配新号码!
重复办理身份证,获取旧号码!
身份证号码是否一致:true
第一次号码:No400011112222
第二次号码:No400011112222
内容是否相等:true
是否是相同对象:true
打印池
1.打印池类
package SpoolerSingleton;
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("管理打印任务!");
}
}
2.异常辅助类
package SpoolerSingleton;
public class PrintSpoolerException extends Exception
{
public PrintSpoolerException(String message)
{
super(message);
}
}
3.客户端类
package SpoolerSingleton;
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());
}
}
}
执行结果:
创建打印池!
管理打印任务!
打印池正在工作中!