设计模式学习之单例模式
来源:互联网 发布:韩国实力知乎 编辑:程序博客网 时间:2024/05/17 22:06
设计模式
单例模式是比较简单的,用处非常广泛,最近学习mybatis,其底层好多用的就是单例模式,比如其中的一个组件SqlSessionFactory的创建就是用单例模式处理的。再比如数据库连接池,日志管理,等,都会用到单例,总结起来就是,当程序运行时,需要保证一个对象只有一个实例存在,就会用到单例模式。单例模式解决的核心问题就是:一个类下可以创建多个对象而导致的浪费内存的问题。先看一段代码:
/*JDK自带的Runtime类,主要可以获取当前的jvm虚拟内存,运行垃圾回收等,也就是通过这个类可以获得与jvm运行环境相关的一些信息,这里我们不过多地纠结这个类本身,下面是部分源代码*/public class Runtime {//这里定义了这个类本身的一个实例,static类型 private static Runtime currentRuntime = new Runtime(); //定义一个静态方法,用来获取静态实例 public static Runtime getRuntime() { return currentRuntime;}//将构造方法声明为private类型,防止在类外进行实例化,从而确保单例 private Runtime() {}...}
单例模式实现的方法很简单,1.定义一个该类的静态变量,2.定义一个获取该静态变量的静态方法,3.将构造方法私有化 模板如下:
public class Singleton{ private static Singleton singleton = new Singleton(); //饿汉模式在类加载时就创建实例 private Singleton(){}; public static Singleton getSingleton(){ return this.singleton; }}
这种模式被称为饿汉式单例模式。下面看另外一种,被称为懒汉式单例模式
public class Singleton { private static Singleton singleton = null; private Singleton(){}; public static Singleton getSingleton(){ if(singleton==null){//懒汉模式只有在需要获取时创建 singleton = new Singleton(); } return singleton; }}
下面我们考虑在多线程环境下,当多个线程都进行if判断时,就会产生多个实例,我们可以下面这种加双重锁的方法实现多线程环境下的单例。
public class Singleton { private static Singleton singleton = null; private Singleton(){}; public static Singleton getSingleton(){ if(singleton==null){ synchronized (Singleton.class) {//static方法用类的class对象当锁 if(singleton==null){//这里如果不进行判断,仍然会产生多线程产生多个实例的问题 singleton = new Singleton(); } } } return singleton; }}
阅读全文
0 0
- 学习设计模式之单例模式
- 设计模式学习之单例模式
- 设计模式学习之单例模式
- 设计模式学习之单例模式
- 设计模式学习之---单例模式
- 设计模式学习之单例模式
- 设计模式学习之--单例模式
- 设计模式学习之单例模式
- 设计模式之单例模式学习
- 设计模式之单例模式学习
- 设计模式学习之单例模式
- 设计模式之-单例模式学习
- 设计模式学习之单例模式
- 设计模式之单例模式------学习学习再学习
- 学习笔记07-设计模式之单例设计模式
- Java设计模式之单例设计模式学习
- 设计模式之单例学习笔记
- C++设计模式学习之单例
- 问题记录4 错误 LNK2019
- OC和Swift互相跳转
- LeetCode练习记录2017/12/9
- IOS地理位置及定位系统MapKit开发推荐
- SDFormat
- 设计模式学习之单例模式
- gazebo
- 在c++中如何控制小数位数
- python正则表达式(基础)
- 敌人
- Pycharm throws error :ImportError: No module named sklearn
- 杭州电子科技大学ACM竞赛试题----百步穿杨
- Unity3d中UI开发的MVC模式
- jQuery UI 日期选择器(Datepicker)使用总结