单例模式(单子模式)

 一、什么是单例模式?

    在我们的Java应用程序中,随着应用程序的运行会创建出很多对象。但有时候我们希望在创建某类对象时,无论创建多少次该类对象只有一份在内存中。这就是单例模式。如果我们要实现单例模式首先要保证构造函数私有化,即不允许用户随意调用我本类的构造函数,因为只要通过new操作创建对象,必定要在堆中开辟空间,这样就无法实现单例了。

单例类有如下特点:
    § 单例类只有一个实例。
    § 单例类自行创建并提供这个唯一的实例。
单例模式有以下的特点:
    § 单例类只能有一个实例。
    § 单例类必须自己创建自己的惟一的实例。
    § 单例类必须给所有其他对象提供这一实例。

 

二、单例模式的实现

第一种实现方式:

  1. /**  
  2.  * 单例模式(饿汉式单例类) 从速度和反应时间角度来讲,饿汉式单例类稍好  
  3.  * @author Administrator  
  4.  *  
  5.  */  
  6.   
  7. public class Singleton {   
  8.   
  9.     private static Singleton singleton = new Singleton();   
  10.     private String value;   
  11.        
  12.     //构造方法要私有   
  13.     private Singleton(){   
  14.            
  15.     }   
  16.        
  17.     //提供一个对外的方法   
  18.     public static Singleton getSingleton(){   
  19.         return singleton;   
  20.     }   
  21.   
  22.     public String getValue() {   
  23.         return value;   
  24.     }   
  25.   
  26.     public void setValue(String value) {   
  27.         this.value = value;   
  28.     }   
  29.        
  30. }  

第二种实现方法

  1. /**  
  2.  * 单例模式(懒汉式单例类) 单从资源利用效率角度来讲, 懒汉式单例类好些  
  3.  * @author Administrator  
  4.  *  
  5.  */  
  6.   
  7. public class Singleton2 {   
  8.   
  9.     private static Singleton2 singleton = null;   
  10.     private String value;   
  11.        
  12.     //构造方法要私有   
  13.     private Singleton2(){   
  14.            
  15.     }   
  16.        
  17.     //提供一个对外的方法   
  18.     public static Singleton2 getInstance(){   
  19.         if(singleton == null){   
  20.             singleton = new Singleton2();   
  21.         }   
  22.         return singleton;   
  23.     }   
  24.   
  25.     public String getValue() {   
  26.         return value;   
  27.     }   
  28.   
  29.     public void setValue(String value) {   
  30.         this.value = value;   
  31.     }   
  32.        
  33. }  

测试类:

  1. public class Test {   
  2.        
  3.     public static void main(String[] args) {   
  4.            
  5.         Singleton s1 = Singleton.getSingleton();   
  6.         Singleton2 s2 = Singleton2.getInstance();   
  7.         System.out.println(s1.equals(s2));   
  8.         s1.setValue("100");   
  9.         s2.setValue("200");   
  10.         System.out.println(s1.getValue());   
  11.   
  12.     }   
  13.        
  14. }  

 

转载于:https://www.cnblogs.com/qinqinmeiren/archive/2011/07/14/2151691.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值