您的位置:首页 > 其它

设计模式之单例模式

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();
}


这种方式是很优的一种方式,即能实现懒加载(第一次用到才加载),又是线程安全的(只初始化一次)。

优缺点

优点

保持一个类只有一个实例,减少了内存的开销

避免资源的多重使用,在系统中为全局访问点,优化和共享资源访问

缺点

可能会导致内存泄漏,因为该实例是静态的,在创建它的时候往往要传入一个其他的对象。

使用场景

建立文件、数据库的访问对象

某个对象被频繁地访问

系统资源的访问和相应对象的创建(创建会耗费大量资源)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息