单例模式详解

来源:互联网 发布:广州房产成交数据 编辑:程序博客网 时间:2024/06/08 01:25

    单例模式就是保证一个类只能有一个对象,并提供一个访问该实例的全局的访问点。

    单例模式在一些只需要有一个实例的场景下比如windows的任务管理器,保证只创建一个对象避免不必要的系统资源消耗。

    单例模式按照创建实例的时间不同分为类一加载就创建对象的饿汉式和延时创建对象的懒汉式。

    饿汉式的是类一加载就创建对象,天然线程安全;方法没有同步,调用效率高;但是没有延时加载更节省系统资源的优势。

   代码如下:

classSingletonDemo{

    privateSingletonDemo(){
     }
    private static SingletonDemoinstance=newSingletonDemo();
    public static SingletonDemo getInstance(){
       return instance;
     }
}
    懒汉式是当需要对象时才创建对象,线程安全,方法要同步调用效率低。但是比饿汉式更节省资源。
    代码如下:
class SingletonDemo2{
  private SingletonDemo2(){
  }
  private static SingletonDemo2instance2;
  public static synchronized SingletonDemo2 getInstance2(){
  if (instance2==null)
  {
   instance2=newSingletonDemo2();
   }
  return instance2;
}
}
为了解决饿汉式和懒汉式的缺点:
我们还有其他的优化。
1.双重检查锁式,
在懒汉式中我们是每次调用方法就要同步,现在我们把,同步代码块移动至if==null上,当不为空
时才用sybchronized关键字。
2.静态内部类实现方式(兼顾线程安全、懒加载和高调用效率优点)
代码如下
class SingletonDemo3{
  private SingletonDemo3(){
  }
  private static class SingletonClassInstance{
  private static final SingletonDemo3Instance6=newSingletonDemo3();
  }
  public static SingletonDemo3 getInstance(){
  return SingletonClassInstance.Instance6;
   }
}
3.枚举方式:
代码如下:
/**
* 枚举类天然就是单例的,可以避免其他方式的反射和反序列化的漏洞;
* 效率也挺高的
* 缺点就是没有懒加载
*/
public enum SingletonDemo5 {
 INSTANCE5;
//也可以在这里定义一些其他方法
  public voidgetInstance(){
  }
}
单例模式的应用场景:
1.项目中读取配置文件的类,一般只有一个对象,没有必要每次读取配置文件都new一个对象。
2.网站的计数器一般都采用单例模式实现,否则难以同步。
3.应用程序的日志应用,一般都采用单例模式。因为一般共享的日志文件一直处于打开状态,
只有一个实例的情况下内容才好追加。
4.数据库连接池都是单例模式,因为数据库连接是一种数据库资源,每个实例都消耗大量资源。
5.操作系统的文件系统也是单例模式,一个操作系统只能有一个文件系统。
6.Application也是单例的典型应用(servelet编程会涉及到)
7.在spring中每个Bean默认就是单例的,这样spring容器就可以管理。
8.在spring MVC框架\struts1框架中,每一个控制器都是单例。
9.在servelet编程中,每一个 servelet也是单例。
单例的需用;
1.单例对象消耗的资源少,不需要延时加载
枚举类好于饿汉式
2.单例独享消耗的资源多,需要延时加载
静态内部类式好于懒汉式

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 早晨尿尿有泡泡 小孩尿尿有泡泡怎么回事 尿尿泡泡 怎么判断自己是不是泡沫尿 正常人早晨第一泡尿有泡沫吗 为什么小便会有泡沫 康师傅油泼辣子酸汤面 甲泼尼龙琥珀酸那 尿是浅红色 晨尿颜色浅 突发血尿 尿里有浅血 尿浅血怎么回事 尿里有浅血是什么原因 隐血十一什么意思 尿混浊有沉淀物 尿浊是什么原因 晨尿混浊是怎么回事 尿混浊有异味 尿茶色尿是什么病 总是尿黄尿是怎么回事 尿 混浊 尿很混浊 尿是混浊的 尿浑浊什么原因 尿很浑浊 尿有点浑浊 拉尿拉出白色浑浊液体 男尿浑浊 早上第一泡尿很浑浊 尿变浑浊是怎么回事 早上尿浑浊 早晨第一泡尿浑浊 偶尔尿浑浊 尿发白浑浊是怎么回事 孕妇尿液浑浊 怀孕尿液浑浊 尿比较浑浊 尿前段白色浑浊 尿 浑浊 女性尿浑浊