单例模式三要点:
单例类只能有一个实例
单例类必须自己创建这个实例
单例类必须自行向整个系统提供这个实例
单例类的代码结构:
*一个静态私有成员变量;//用于判断是否只有一个实例
一个私有构造函数;//确保用户无法通过new关键字直接实例化它
一个静态公有的工厂方法。*//自己创建实例
单例模式代码模板:
单例模式例子:
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));
}
}
小结:
单例模式的目的:
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
为了防止在外部对其实例化,将构造函数设计为私有;
静态工厂方法负责检验实例的存在性并实例化自己,然后存储在静态成员变量中。
单例模式使用情况:系统只需要一个实例对象;客户调用类的单个实例只允许使用一个公共访问点。