单例模式既是一个类只允许有一个实例的模式.一个模式是单例模式有以下特征:
1一个类只能有一个实例(显然只有静态类符合此要求)
2必须自行创建这个实例
3必须自行向整个系统提供这个实例.
举一个实际例子:每台计算机可以有若干通信端口,而我们的系统会集中管理这些通讯端口,以避免一个通信端口同时被两个请求同时调用.
public class officeFactory()
{
private static officeFactory instance =null;
privata officeFactory(){}
public static officeFactory getinstance()
{
if(instance == null)
{
instance = new officeFactory();
}
return instance;
}
}
单例模式在多线程的应用场合下必须小心使用。如果当唯一实例尚未创建时,有两个线程同时调用创建方法,那么它们同时没有检测到唯一实例的存在,从而同时各自创建了一个实例,这样就有两个实例被构造出来,从而违反了单例模式中实例唯一的原则。 解决这个问题的办法是为指示类是否已经实例化的变量提供一个互斥锁(虽然这样会降低效率)。