23种设计模式之单例模式
来源:互联网 发布:halcon二维码识别优化 编辑:程序博客网 时间:2024/06/03 17:57
单例模式可以说是我最早接触的一种设计模式(当时还不知道设计模式的时候),等到后来说单例,才知道是一种设计模式,下面谈谈对单例的理解
概念:
确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例
注释:1.私有构造方法
2.指向自己实例的私有静态引用
3.以自己实例为返回指的静态的公有方法
适用性:
1.每次从getInstance()都能返回一个且唯一一个对象
2.资源共享的情况下,getInstance()必须适用多线程并发访问
3.提高访问性能
分类:
饿汉式和懒汉式
具体应用
饿汉式
<span style="font-size:18px;">public class Singleton { private static Singleton singleton = new Singleton(); private Singleton(){} public static Singleton getInstance(){ return singleton; } } </span>
遇到的问题:假设这样的场景:两个线程并发调用Singleton.getInstance(),假设线程一先判断完instance是否为null,既到if这里。刚刚判断完毕后,JVM将CPU资源切换给线程二,由于线程一还没执行(instance = new SingletonA();),所以instance仍然是空的,因此线程二执行了new Signleton()操作。片刻之后,线程一被重新唤醒,它执行的仍然是new Signleton()操作。所以这种设计的单例模式不能满足第2点需求。
<span style="font-size:18px;">public class Singleton { private static Singleton singleton; private Singleton(){} public static synchronized Singleton getInstance(){ if(singleton==null){ singleton = new Singleton(); } return singleton; } } </span>
用sychronized避免出现线程问题,但是消耗很大,所以,一般java中都是采用饿汉式,c中采用懒汉式
优点:
1.在内存中只有一个对象,节省内存空间
2.避免频繁的创建和销毁对象,提高性能
3.避免对共享资源的多重占用
4.全局访问
在Android中的应用
1.在应用编写的时候的Application
2.日历模块(CalendarDatabaseHelper)、输入法等等系统的应用
3.我用过一个Volley框架访问往来,它的队列就是单例模式RequestQueue requestQueue = BvinApp.getHttpQueue();(我这里用的是Application,其实写成单例更好,符合设计模式. . . . .)这样可以保证程序的周期之内只有一个队列
- 23种设计模式 之单例设计模式
- 23种设计模式之 单例
- 23种设计模式学习之东拼西凑-------单例模式
- 23种设计模式之单例模式(Singleton)
- 23种设计模式之单例模式
- c++23种设计模式之单例模式
- 23种设计模式简单概述之单例模式
- 23种设计模式之python实现--单例模式
- java 23种设计模式之单例模式
- 23种设计模式之单例模式
- 23种设计模式之单例模式
- 23种设计模式之【单例模式】
- 黑马程序员-23种设计模式之单例模式
- 23种设计模式C++实例之单例模式
- 23种设计模式之单例模式
- 23种设计模式之单例模式
- 23种设计模式之单例模式
- 23种设计模式之——单例模式
- Web前端——jsp页面参数显示的几个小问题
- G++和C++的区别
- 死循环
- SpringMVC对RESTful支持
- 有关模板的一些注意情况
- 23种设计模式之单例模式
- Java对象判等,重写equals方法
- iptables详解
- POJ 3261 Milk Patterns 后缀数组+二分
- java下载excel在firefox中中文名称乱码
- Java反射机制(3)
- Qt(11):QT的绘制系统
- FPGA产生基于LFSR的伪随机数
- 通过sysfs文件系统操作gpio