单例设计模式(一)
来源:互联网 发布:手机淘宝网客户端 编辑:程序博客网 时间:2024/05/16 17:03
1、引入
在很多项目中,我们常常需要读取配置文件,也就是说在很多地方都需要创建对象帮我们完成任务。但是,在系统运行期间,系统会存在很多个这样的对象,而且每个对象里面都封装这配置文件的内容,这样会严重浪费内存。实际上,我们只需要一个对象就可以完成我们所需的任务。
2、单例设计模式
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
3、单例模式的结构说明
4、单例模式的实现
懒汉式:马上要使用对象实例的时候才会创建,需要在getInstance方法里去判断。
private static Singleton uniqueInstance = null;
饿汉式:在装载类的时候就创建对象的实例。
private static Singleton uniqueInstance = new Singleton();
懒汉式:
package singleton;/** * 懒汉式单例设计模式 * @author Administrator * */public class Singleton { /** * 定义一个变量来存储创建好的类实例 */ private static Singleton uniqueInstance = null; /** * 私有化构造方法,可以在内部控制创建实例的数目 */ private Singleton(){ } public static synchronized Singleton getInstance(){ //判断存储实例的变量是否有值 if(uniqueInstance==null){ //如果没有创建一个 return new Singleton(); } return uniqueInstance; } /** * 单例自己的方法 */ public void singletonOperation(){ System.out.println("Singleton's method......."); } /** * 单例自己的属性 */ private String singletonData;}饿汉式:
package singleton;/** * 饿汉式单例设计模式 * @author Administrator * */public class Singleton1 { /** * 定义一个变量来存储创建好的类实例,直接在这里创建实例,只创建一次 */ private static Singleton1 uniqueInstance = new Singleton1(); /** * 私有化构造方法,可以在内部控制创建实例的数目 */ private Singleton1(){ } public static Singleton1 getInstance(){ //直接使用已创建好的实例 return uniqueInstance; } /** * 单例自己的方法 */ public void singletonOperation(){ System.out.println("Singleton1's method......."); } /** * 单例自己的属性 */ private String singletonData;}
5、单例设计模式中存在问题
①应该根据实际环境选择单例模式
②懒汉式在需要用的时候创建实例,节省了内存空间;饿汉式在类装载的时候就创建了实例节省了运行时间。
③懒汉式是线程不安全的,用的时候需要加同步锁,因为在运行时,有两个线程可能同时访问getInstance方法;饿汉式是线程安全的,类只会装载一次。
④给懒汉式加个同步锁 public static synchronized Singleton getInstance(){},他会降低整个访问速度,而且每次都要判断。可以使用双重检查加锁去解决。
http://blog.csdn.net/gxc312648465/article/details/50822342
0 0
- 设计模式(一) 单例模式
- 设计模式(一):单例模式
- 单例模式---设计模式(一)
- 设计模式(一):单例模式
- 设计模式(一)-单例模式
- 设计模式(一):单例模式
- 设计模式(一)单例模式
- 设计模式(一)单例模式
- 设计模式-单例模式(一)
- 设计模式(一):单例模式
- 设计模式(一)单例模式
- 设计模式(一)--单例模式
- 设计模式(一):单例模式
- 设计模式(一)-单例模式
- 设计模式(一) 单例模式
- 设计模式(一)--单例模式
- 设计模式(一):单例模式
- 单例设计模式(一)
- Unity中关于图形学的基础知识—矩阵(二)
- Uva725——Division
- ubuntu技巧--ubuntu caffe安装
- J2EE开发之servlet
- Leetcode:27. Remove Element(JAVA)
- 单例设计模式(一)
- Arm linux启动流程
- Struts1 struts2 springmvc3比较
- CodeForces - 630A Again Twenty Five! (水)
- Git基本用法(上) - 摘自实验楼
- 项目2-就拿胖子说事
- 明天去借书
- 继续更新学习进度
- [转]GBDT(Gradient Boosting Decision Tree)迭代决策树