创建类模式之一单例模式

单例模式是一个类有且只有一个对象

表现为 在内存中只有一个实例,系统开销小

优点:

1 一个对象的产生需要较多资源时(如读取配置、产生其他依赖对象),可以用单例模式,然后用永久驻留内存的方式解决(Java EE中采用单例模式时需要注意JVM垃圾回收机制

2 避免对同一个文件多重占用

3 在系统设置全局的访问点,优化和共享资源访问,如单例类负责所有数据表的映射处理。

缺点:

1 对测试不利,在并发环境中,单例模式没有完成,不能测试

2 与单一职责原则冲突

应用:

1 生成唯一序列号

2 共享访问点或共享数据(web页面的计数器,注意保证是线程安全的)

3 创建一个对象需要消耗过多资源时,如访问IO和数据库等资源

4 需要定义大量的静态常量和静态方法( 如工具类) 的环境, 可以采用单例模式( 当然, 也可以直接声明为static的方式

注意:

高并发下,注意单例模式的线程同步问题,最好使用恶汉式的单例模式

Java中类实现Cloneable接口并实现clone方法就可实现对象复制,此时不调用类的构造函数,即使是私有的构造函数,依旧可以被复制。因此最好的方法是单例类不要实现Cloneable接口

扩展:产生有上限的多例模式

Spring中,每个bean默认都是单例的,bean生命周期由spring容器来管,非单例模式(prototype类型)由j2ee容器来管理

类图如下:


代码如下:

public class Single {
  //恶汉,,但内存浪费
  
   //私有化构造函数
   private Single(){}
   //本类对象
  private  static  Single s = new Single();//避免了多线程的同步问题,类加载时就存在
   //对外访问
   static public Single getInstance(){
  return s;
   }
   
   public static void main(String[] args) {
// 只能调用类的getInstance方法,而不能通过对象调用 ,所以方法应为static
      Single.getInstance();
      Single.getInstance();//同一个对象
}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值