2008
-
03
-
19
[原]单例模式
关键字: 单例模式
下面代码中的理解:
Singleton类之所以是private型构造方法,就是为了防止其它类通过new来创建实例,即如此,那我们就必须用一个static的方法来创建一个实例(为什么要用static的方法?因为既然其它类不能通过new来创建实例,那么就无法获取其对象,那么只用有类的方法来获取了)
另一种写法:
注意下面注释掉的部分没有final,在测试中发现一个问题就是有final与没有final最后的测试输出都为ture,不解,后来问题的一个高人,经指点,得知单态的情况下.有final与没有final在于后面的修改,而不是new与不new的问题.final在这个例子中是表示那个instance在后面是不可以修改的
转载自 http://singlewolf.iteye.com
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();
- }
- }
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();
- }
- }
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();
}
}
转载自 http://singlewolf.iteye.com