关于单例模式,如何理解?

来源:百度知道 编辑:UC知道 时间:2024/06/25 06:01:08
单例类有以下三个特点:
1、单例类只可有一个实例
2、单例类必须自己创建自己这惟一的实例
3、单例类必须给所有其他对象提供这一实例
有如下一个单例类:
public class EagerSingleton{
private static final EagerSingleton hungryman=new EagerSingleton();
//默认的私有的构造函数
private EagerSingleton(){}
//静态工厂方法
public static EagerSingleton getInstance(){
return hungryman;
}
public void say(){
System.out.println("饿汉式类在说话了!");
}
}

而在引用的时候我这样子:
EagerSingleton cm=EagerSingleton.getInstance();
EagerSingleton cm2=EagerSingleton.getInstance();
cm.say();//单例类一
cm2.say();//单例类二
不是产生了两个单例类吗?而特点一如何解释??
盼高手解答~~~~~

单例模式就是 :
1、类的构造函数为private,即外部程序不能通过new关键字创建对象的实例
2、类中提供一个private static的 类变量引用 ;
3、单例类中提供静态方法 定义为 public static 的方法获取一个类的实例 ;
4、静态方法返回 类的引用,即 第2点中的 私有 静态变量 。

私有静态变量可以 定义的时候初始化 ,也可以 在第一次使用的时候,即调用AA.getInstanc()方法中判断 静态变量是否为空在初始化 。

你的单例类一的引用cm和单例类二的引用cm2实际上都指向了类EagerSingleton中的private static final EagerSingleton hungryman这个唯一的实例(这便是特点一:单例类只可有一个实例 ),即不管你创建再多的
EagerSingleton cm3=EagerSingleton.getInstance();
EagerSingleton cm4=EagerSingleton.getInstance();
......
其实cm3,cm4......他们都指向唯一的一个EagerSingleton类中的hungryman.即所有的单例类EagerSingleton的实例都是这个hungryman实例,明白了吗?

单例 感觉 一般都是 私有化构造函数 然后提供一个方法来调用构造初始化
补充一点 上上面说的。。

嗯,楼上的回答很好,可以设为答案了