一、一般结构:
package danli;public class Singleton {// private Singleton(){
// }
//
// //静态内部类
// private static class HolderClass{}{
// private final static Singleton instance = new Singleton();
//
// }
//
// public static Singleton getInstance(){
// return HolderClass.instance;
// }
//
// public static void main(String[] args) {
// Singleton s1,s2;
// s1 = Singleton.getInstance();
// s2 = Singleton.getInstance();
// System.out.println(s1==s2);
// }//静态私有成员变量private static Singleton instance=null;//私有构造函数private Singleton(){}//静态公有工厂方法,返回唯一实例public static Singleton getInstance(){if(instance==null){instance = new Singleton();}return instance;}}
静态私有实例
私有构造函数
公有工厂方法(主函数调用的时候使用),确保不能通过new关键字来创建实例,通过这种方法获取实例
二、实例:
实例1、身份证:
、、、
package danli.shenfenzheng;
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("N04000111112222");
}else{
System.out.println("重新办理身份证,获取旧号码!");
}
return instance;
}
private void setIdentityCardNo(String no){this.no=no;
}
public String getIdentityCardNo(){return this.no;
}
}
、、、
、、、
package danli.shenfenzheng;
public class Client {
public static void main(String[] args) {
IdentityCardNo no1, no2;
no1=IdentityCardNo.getInstance();
no2=IdentityCardNo.getInstance();
String str1=no1.getIdentityCardNo();
String str2=no2.getIdentityCardNo();
System.out.println("第一个身份证号码为:"+str1);
System.out.println("第二个身份证号码为:"+str2);
System.out.println("两个身份证号码是否相同:"+str1.equalsIgnoreCase(str2));
System.out.println("两个身份证号码是否相同:"+str1==str2);
}
}
示例2、打印池:
package danli.dayinchi;
//异常类,抛出一个打印池异常
public class PrintSpoolerException extends Exception{
public PrintSpoolerException(String message){
super(message);
}
}
package danli.dayinchi;
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("管理打印任务!");
}
}
、、、
、、、
package danli.dayinchi;
public class Client {
public static void main(String[] args) {
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());
}
}
}
、、、