单例设计模式之个人见解
来源:互联网 发布:seo站群计划书 编辑:程序博客网 时间:2024/04/30 05:53
单例模式(Singleton):
单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。这样的模式有几个好处:
1、某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。
2、省去了new操作符,降低了系统内存的使用频率,减轻GC压力。
3、有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系统完全乱了。(比如一个军队出现了多个司令员同时指挥,肯定会乱成一团),所以只有使用单例模式,才能保证核心交易服务器独立控制整个流程。
2、省去了new操作符,降低了系统内存的使用频率,减轻GC压力。
3、有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系统完全乱了。(比如一个军队出现了多个司令员同时指挥,肯定会乱成一团),所以只有使用单例模式,才能保证核心交易服务器独立控制整个流程。
单例模式代码实现步骤:
1、将构造函数私有化。
2、在类中创建一个本类对象。
3、提供一个方法可以获取到该对象。
2、在类中创建一个本类对象。
3、提供一个方法可以获取到该对象。
(对于事物怎么描述,还怎么描述。当需要将该事物的对象保证内存唯一时,将以上三部加上。)
Class SingLeton{//构造私有化private SingLeton(){}//创建实例private static SingLeton instance = new SingLetion();//获取实例的方法public static SingLetion getInstance(){return instance;}}
单例设计模式的特点:
1、为了避免其他程序过多建立该类对象。先禁止其他程序建立该对象。
2、还为了让其他程序可以访问到该类对象,只好自本类中,自定义一个对象。
3、为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式。
单例设计模式两种实现方法:
1、饿汉式
Class SingLeton{//私有化构造方法,好在内部控制创建实例的数目private SingLeton(){}//定义一个变量来存储创建好的类实例,只会创建一次private static Singleton instance = new Singleton();//定义一个方法提供类的实例public static Singleton getInstance(){return instance;}}2、懒汉式
Class SingLeton{//私有化构造方法,好在内部控制创建实例的数目private SingLeton(){}//定义一个变量来存储创建好的类实例,只会创建一次private static Singleton instance = null;//定义一个方法提供类的实例,为了保证线程安全安全需要加synchronizedpublic static synchronized Singleton getInstance(){//判断是否为空if(instance==null){//创建一个实例instance = new Singleton();}return instance;}}
线程安全:如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。
两种模式的比较:
时间和空间:
懒汉式是典型的时间换空间,也就是每次获取实例都会进行判断,看是否需要创建实例,浪费判断的时间。当然,如果一直不使用实例,那就不会创建实例,从而节约了内存空间。饿汉式是典型的空间换时间,当类装载的时候就会创建类实例,不管你用不用,先创建出来,然后每次调用的时候,不用进行判断,直接返回类实例即可,节约了运行时间。
安全性:
从线程安全上来讲,不加同步的懒汉式是线程不安全的,懒汉式实现就是线程不安全的。饿汉式是线程安全的,因为虚拟机保证只装载一次,在装载类的时候是不会发生并发的。那么如何实现懒汉式的线程安全呢?只需要加上synchronized 关键字即可,但是这种写法有一个弊端,那就是每次调用这个getInstance()方法的时候都需要同步,影响性能。更好的方法是使用双重检查加锁机制。这种方法即能保证线程安全,又能够使性能不受太大影响。
0 0
- 单例设计模式之个人见解
- PHP设计模式之单例模式个人见解
- 设计模式之个人见解
- 个人笔记整理-java设计模式之单例模式
- java设计模式之单例模式----个人笔记
- 设计模式之见解一
- 设计模式之见解二
- 设计模式之见解三
- 个人学习-java-单例设计模式
- 个人对单例设计模式理解
- 单例设计模式的个人理解
- JAVA之工厂方法模式个人见解
- 设计模式之外观模式见解
- 设计模式之 单例设计模式
- 设计模式之 单例设计模式
- 设计模式之单例设计模式
- 设计模式之-----------单例设计模式
- 设计模式之:单例设计模式
- sublime text2的cocos2dx-lua插件安装
- 微软msmq
- CICS返回码参考
- UVA11387 - The 3-Regular Graph(推理)
- Android图片管理组件(双缓存+异步加载)
- 单例设计模式之个人见解
- theano库中function函数output和updates执行的先后顺序
- java方法参数
- 2014ECCV视觉跟踪录用文章
- IE6中用了float:left之后导致margin-left双倍边距的BUG解决方法
- 下雨效果
- 【iOS-cocos2d-X 游戏开发之一】在Mac下结合Xcode搭建Cocos2d-X开发环境&卸载Cocos2dx模版
- Cocos2d
- jstl中添加自定义的函数