设计模式--单例设计模式
来源:互联网 发布:mmd制作软件手机 编辑:程序博客网 时间:2024/06/05 20:13
1有些是出于内存消耗的考虑,比如类中数据量比较大的情况,或者说属性较多.
2:有些是为了不引起程序的混淆,必须保证类的实例只能有一份,比如框架的容器,就那spring容器来说,spring容器必须要是单例的,如果不是单例的,那么也就是说同一个数据在容器中存在着多份,会造成程序的复杂性提高;
实现的思路:1构造函数私有化,将对象的创建权限保留在本类中(反射方式除外)2在本类内部创建静态实例 3给外部提供静态方法获取到该实例;
就实例的创建时机来将分为饿汉式和懒汉式.
饿汉式:就是指实例声明即初始化;这个最好理解;
懒汉式:就是延迟初始化,仅仅当获取的时候将实例进行初始化,这个在多线程环境下容易出现线程安全问题,需要有一定的同步机制进行防止;
主要有1DCL,双重锁机制,用synchronized关键字对对象的初始化进行锁定,保证线程安全问题;
public class SingletonsByRWL {
基于原理:内部类的加载时机,是仅仅使用到的时候加载,因为内部类也有对应的字节码,内部类被使用到的时候jvm才会加载对应的内部类字节码;
public class Singleton {
private static Singleton instance;
private Singleton() {
}
private static class InnerSingleton {
public static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return InnerSingleton.INSTANCE;
}
}
在这里就是仅仅当你调用getInstance方法的时候才加载,并创建Singleton对象;从而做到了懒加载.同时线程安全问题不用考虑,jvm底层提供保证;
这是一种比较优雅的实现单实例的懒加载的方式;
ps:在反射的情况下,private修饰的构造函数可以被暴力反射,从而创建多个对象,如果你要避免这种情况,可以使用SecurityManager机制进行实现,
通常由应用服务器内部的配置实现;
0 0
- 设计模式------单例模式
- 设计模式------单例模式
- 设计模式-单例模式
- 设计模式 - 单例模式
- 设计模式---单例模式
- 设计模式---单例模式
- 【设计模式】单例模式
- 设计模式-单例模式
- 设计模式----单例模式
- 设计模式--单例模式
- 设计模式-单例模式
- 设计模式-单例模式
- [设计模式] 单例模式
- 设计模式--单例模式
- 设计模式---单例模式
- 设计模式--单例模式
- 设计模式 -----单例模式
- 设计模式:单例模式
- BP 神经网络 反向传播算法
- Hibernate+SpringMVC整合实战一:搭…
- Hibernate+SpringMVC整合:实战二,…
- Hibernate+SpringMVC整合:实战三,…
- 反射技术实现POI表格信息的注入
- 设计模式--单例设计模式
- 设计模式--工厂设计模式(一)
- 设计模式--工厂设计模式(二)
- 设计模式--工厂模式(三)
- Spring中JdbcTemplate实现存储过程…
- Servlet和jsp对外访问路径的配置的…
- mysql优化技术
- Oracle连接查询
- Spring给我的启发