设计模式之单例模式
2018-04-04 22:44
162 查看
概述
设计模式可以说在我们的开发中很常见,包括使用在自己的代码中,或者看别人写的代码(比如框架)中,基本都会用到。在一本书中看到:设计模式也即是人们在开发中共同认同的一种开发习惯,可以提高代码的可读性、重用性和扩展性。由此可见学习设计模式并应用到实际开发中是很重要的。单例模式
今天要介绍的第一个设计是单例模式,它在我们的开发中或生活中都很常见。它的用法有以下方式:饿汉式
private static Single sInstance=new Single(); public static Single getInstance(){ return sInstance; }
懒汉式
private static Single sInstance; public static Single getInstance() { if (sInstance != null) sInstance = new Single(); return sInstance; }
以上这种方式是线程不安全的,如果在高并发的情况下,就可能导致不只存在一个实例。所以以下的代码是加上了同步。
双层判断
private static volatile Single2 sInstance; public static Single2 getInstance(){ if(sInstance==null){ synchronized(Single2.class){ if(sInstance==null){ sInstance=new Single2(); } } } return sInstance; }
以上这种方式虽然可以避免重复创建实例,但是由于加上同步操作,所以性能会相对差。
静态内部类
public static Single getInstance(){ return InnerClass.mSingle; } static class InnerClass{ static Single mSingle=new Single(); }
这种方式是很优的一种方式,即能实现懒加载(第一次用到才加载),又是线程安全的(只初始化一次)。
优缺点
优点保持一个类只有一个实例,减少了内存的开销
避免资源的多重使用,在系统中为全局访问点,优化和共享资源访问
缺点
可能会导致内存泄漏,因为该实例是静态的,在创建它的时候往往要传入一个其他的对象。
使用场景
建立文件、数据库的访问对象某个对象被频繁地访问
系统资源的访问和相应对象的创建(创建会耗费大量资源)
相关文章推荐
- 设计模式——外观模式(Facade Pattern)
- 23种设计模式(13)_行为型_模版方法模式(Template Method)
- 设计模式
- 设计模式之适配器(Adapter)模式
- 重拾Javascript基础(五) - JS设计模式
- 设计模式之观察者模式
- 设计模式不能做什么
- 23种设计模式(18):访问者模式
- 随堂笔记160307静态代码块设计模式
- 单例设计模式 浅析
- 理解MVC,MVP和MVVM设计模式
- 设计模式六大原则(1):单一职责原则
- JAVA设计模式之单例模式
- Java I/O 技术(四)—— 装饰设计模式及应用 初识
- 开始设计模式的学习
- 设计模式之单例模式
- 23种设计模式汇总整理
- 设计模式转载
- 设计模式——工厂方法模式(Factory Method)
- 设计模式--中介者模式