在一些特殊场景下,不允许自由创建某类的对象,只允许为该类创建一个对象。实现步骤:
- 把该类的构造器使用private修饰,将该类的所有构造器隐藏
- 提供一个public方法作为该类的访问点,用于创建该类对象,且该类方法必须使用static修饰
- 使用一个成员变量保存曾今创建的对象
一个小栗子:
public class Singel {
//使用一个类变量来缓存曾今创建的实例
private static Singel s;
//对构造器使用private修饰,隐藏该构造器
private Singel(){}
//提供静态方法,用于返回singel实例
//该方法可以加入自定义控制,保证只生产一个Singel对象
public static Singel getS(){
//如果S 为NULL,表明还未创建Singel对象
//如果S 不为NULL,表明已经创建Singel对象
if(s==null){
s=new Singel();
}
return s;
}
public class SingleTest(){
public static void main(String[] arg){
Singel s1=s.getS();
Singel s2=s.getS();
System.out.println(s1==s2);
}
}
}
输出结果为True,表明两次Singe对象为同一个对象