[原]单例模式

下面代码中的理解:
Singleton类之所以是private型构造方法,就是为了防止其它类通过new来创建实例,即如此,那我们就必须用一个static的方法来创建一个实例(为什么要用static的方法?因为既然其它类不能通过new来创建实例,那么就无法获取其对象,那么只用有类的方法来获取了)


class Singleton {
private static Singleton instance;
private Singleton(){}
public static Singleton getInstance(){
if(instance==null){
instance = new Singleton();
}
return instance;
}
public void say(){
System.out.println("单例模式");
}
}

public class SingletonDemo{
public static void main(String[] args) {
Singleton s1 = Singleton.getInstance();
//再次getInstance()的时候,instance已经被实例化了
//所以不会再new,即s2指向刚初始化的实例
Singleton s2 = Singleton.getInstance();
System.out.println(s1==s2);
s1.say();
s2.say();
}
}



另一种写法:
注意下面注释掉的部分没有final,在测试中发现一个问题就是有final与没有final最后的测试输出都为ture,不解,后来问题的一个高人,经指点,得知单态的情况下.有final与没有final在于后面的修改,而不是new与不new的问题.final在这个例子中是表示那个instance在后面是不可以修改的


class Singleton {
//private static Singleton instance= new Singleton();
private static final Singleton instance= new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return instance;
}
public void say(){
System.out.println("单例模式");
}
}

public class SingletonDemo{
public static void main(String[] args) {
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
System.out.println(s1==s2);
s1.say();
s2.say();
}
}

[color=red]转载请注明出处,谢谢您对本人的劳动成果表示赞成.[/color]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值