摘要/设计模式/单例模式/Singleton Pattern

what

是一种获取实例的方法

确保一个类在任何情况下都绝对只有一个实例

提供一个全局访问点

创建型模型

why

有的对象全局只需要一个,可以重复使用,防止全局使用的类频繁创建与销毁 ,控制实例数量,节省系统资源

how

J2EE

ServletContext

全局应用程序共享对象

全局唯一的域对象

服务器在内存上创建的存储空间

服务器启动时创建 关闭时销毁

在不同动态资源之间传递与共享数据 所有动态资源都可以写入和获取

getServletContext()

工程内所有对象共享

读取全局配置参数

搜索当前工程目录下资源文件

getRealPath(根据相对路径获得绝对路径)

getResourceAsStream(根据相对路径获取服务器上资源的输入字节流)

获取当前工程名字

getContextPath()

共同方法

setAttribute键值对 getAttribute removeAttribute getInitparameter (web.xml中配置) getInitparameterNames

Spring

ApplicationContext 典型饿汉式

ApplicationContext会预先初始化所有的Singleton Bean,于是在系统创建前期会有较大的系统开销,但一旦ApplicationContext初始化完成,程序后面获取Singleton Bean实例时候将有较好的性能。也可以为bean设置lazy-init属性为true,即Spring容器将不会预先初始化该bean。

数据库

连接池

连接池管理类 连接池的外覆类wrapper 系统中只能有一个连接池管理类的实例 管理不同数据库或者同一数据库中的不同用户

私有构造函数 对外提供获取唯一实例的方法

饿汉式

在类加载之前实例化 在线程出现之前 不存在访问安全问题 执行效率高

占用内存 可能浪费内存

懒汉式

实例延迟初始化 双重校验锁 不会多次初始化 可见性 防止重排

注册式(登记式)单例

将每一个实例都登记到某一个地方,使用唯一的标识获取实例。

两种写法

容器缓存

枚举登记

ThreadLocal 线程单例

ThreadLocal 不能保证其创建的对象是全局唯一,但是能保证在单个线程中是唯一的,天生的线程安全。

破坏

反射破坏单例

序列化破坏单例

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值