单例模式

2008 - 03 - 19

[原]单例模式

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

Java代码 复制代码
  1. class Singleton {   
  2.      private static Singleton instance;   
  3.      private Singleton(){}   
  4.      public static Singleton getInstance(){   
  5.          if(instance==null){   
  6.              instance = new Singleton();   
  7.          }   
  8.          return instance;   
  9.      }   
  10.      public void say(){   
  11.          System.out.println("单例模式");   
  12.      }   
  13. }   
  14.   
  15. public class SingletonDemo{   
  16.     public static void main(String[] args) {   
  17.         Singleton s1 = Singleton.getInstance();   
  18.         //再次getInstance()的时候,instance已经被实例化了   
  19.         //所以不会再new,即s2指向刚初始化的实例   
  20.         Singleton s2 = Singleton.getInstance();   
  21.         System.out.println(s1==s2);   
  22.         s1.say();   
  23.         s2.say();   
  24.     }   
  25. }  
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在后面是不可以修改的

Java代码 复制代码
  1. class Singleton {   
  2.     //private static Singleton instance= new Singleton();   
  3.     private static final Singleton instance= new Singleton();   
  4.      private Singleton(){}   
  5.      public static Singleton getInstance(){   
  6.          return instance;   
  7.      }   
  8.      public void say(){   
  9.          System.out.println("单例模式");   
  10.      }   
  11. }   
  12.   
  13. public class SingletonDemo{   
  14.     public static void main(String[] args) {   
  15.         Singleton s1 = Singleton.getInstance();   
  16.         Singleton s2 = Singleton.getInstance();   
  17.         System.out.println(s1==s2);   
  18.         s1.say();   
  19.         s2.say();   
  20.     }   
  21. }  
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值