设计模式----单例模式

http://www.iteye.com/topic/575052

单例模式

 

保证一个类仅有一个实例,并提供一个访问他的全局访问点

单例模式最要关心的则是对象创建的次数以及何时被创建。

单例模式的实现

一个类的对象产生是由类构造函数来完成的,如果想限制对象的产生,一个办法就是将构造函数私有化(or受保护的),外面的类不能通过引用来产生对象,同时,为了保证类的可用性,必须提供一个自己的对象以及访问这个对象的静态方法。

单例模式可分为有状态的和无状态的。

有状态的单例对象一般也是可变的单例对象,多个单态对象在一起就可以作为一个状态仓库一样向外提供服务。

没有状态的单例对象也就是不变单例对象,仅用做提供工具函数。

 

特点

1,该类只有一个实例
2,该类自行创建该实例(在该类内部创建自身的实例对象)
3,向整个系统公开这个实例接口



实现

Java代码 复制代码
  1. //饿汉式    
  2. public class Singleton {     
  3.     //在自己内部定义自己一个实例    
  4.    //注意这是private只供内部调用    
  5.    private static Singleton instance = new Singleton();    
  6.     //如上面所述,将构造函数设置为私有    
  7.    private Singleton(){}    
  8.     //静态工厂方法,提供了一个供外部访问得到对象的静态方法    
  9.    public static Singleton getInstance() {    
  10.          return instance;    
  11.     }     
  12. }     

 

使用时

 Singleton obj = Singleton.getInstance(); 
 这个单例类在自身被加载时instance会被实例化,即便加载器是静态的。因此,对于资源密集,配置开销较大的单体更合理的做法是将实例化(new)推迟到使用它的时候。即惰性加载(Lazy loading),它常用于那些必须加载大量数据的单体。修改下
  1. //懒汉式    
  2. public class Singleton {    
  3.     //和上面有什么不同?    
  4.    private static Singleton instance = null;    
  5.     //设置为私有的构造函数    
  6.    private Singleton(){    
  7.      }    
  8.     //静态工厂方法     
  9.    public static synchronized Singleton getInstance() {    
  10.     //这个方法比上面有所改进    
  11.        if (instance==null)     
  12.           instance=new Singleton();     
  13.           return instance;    
  14.     }     
  15. }     


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值