zoukankan      html  css  js  c++  java
  • java设计模式----单例模式

    1.单例模式

      1.1.引言:据我了解,单例模式应该属于java设计模式中较为简单的一个设计模式,作为设计模式的开篇,先从简单入手,来慢慢理解设计模式。

      1.2.定义:单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。即一个类只有一个对象实例。

    2.单例模式的特点:

      2.1.类始终只能有一个实例。

      2.2.创建对象的操作需要由本类来完成。

      2.3.该类必须向外界暴漏一个能够访问该类实例的接口(方法).

    3.创建单例模式的要点:

      3.1.私有构造方法。

      3.2.指向自己实例的私有静态引用。

      3.3.以自己实例为返回值的公有接口(方法)。

    4.分类:

      4.1.饿汉式单例: 饿汉式单例在单例类被加载时候,就实例化一个对象交给自己的引用。

        4.1.1.代码实例:HSingleTon.java

     1 package com.cn.singleton;
     2 /**
     3  * 饿汉式单例类
     4  * @author Administrator
     5  *
     6  */
     7 public class HSingleTon {
     8 private static HSingleTon singleton = new HSingleTon();
     9 private HSingleTon(){}
    10 public static HSingleTon getInstance(){
    11     return singleton;
    12 }
    13 }
    View Code

      4.2.懒汉式单例:懒汉式单例是在调用取得实例方法的时候实例化对象。

        4.2.1.代码实现:LSingleTon.java

     1 package com.cn.singleton;
     2 /**
     3  * 懒汉式单例模式
     4  * @author Administrator
     5  *
     6  */
     7 public class LSingleTon {
     8 private static LSingleTon singleton;
     9 private LSingleTon(){}
    10 public static synchronized LSingleTon getInstance(){
    11     if (singleton == null)
    12         singleton = new LSingleTon();
    13     return singleton;
    14 }
    15 }
    View Code

      4.3.双重锁模式:这个模式将同步内容写到了if内部,提高了执行的效率,不必每次获取对象时都进行同步,只有第一次才同步,创建了以后就没必要了

        4.3.1.代码实现:DLSingleTon.java

     1 package com.cn.singleton;
     2 /**
     3  * 双重锁模式单例
     4  * @author Administrator
     5  *
     6  */
     7 public class DLSingleTon {
     8 private static DLSingleTon singleton;
     9 private DLSingleTon(){}
    10 public static DLSingleTon getInstance(){
    11     if (singleton == null){
    12         synchronized (DLSingleTon.class) {
    13             if (singleton == null)
    14                 singleton = new DLSingleTon();
    15         }
    16     }
    17     return singleton;
    18 }
    19 }
    View Code

    5.优缺点:

      5.1.优点:

        a.在内存中只有一个对象,节省内存空间。

             b.避免频繁的创建销毁对象,可以提高性能。

            c.避免对共享资源的多重占用。

            d.可以全局访问。

      5.2.缺点: 

        a.扩展困难,由于getInstance静态函数没有办法生成子类的实例。如果要拓展,只有重写那个类。

          b.隐式使用引起类结构不清晰。

            c.导致程序内存泄露的问题。

    6.适用场景:

        a.需要频繁实例化然后销毁的对象。

               b.创建对象时耗时过多或者耗资源过多,但又经常用到的对象。

               c.资源共享的情况下,避免由于资源操作时导致的性能或损耗等

                 d.控制资源的情况下,方便资源之间的互相通信。

  • 相关阅读:
    命令模式
    装饰者模式
    迭代器模式-统一集合的遍历方式
    springboot源码解析-管中窥豹系列之总体结构
    启动项目tomcat报错
    在项目中部署redis的读写分离架构(包含节点间认证口令)
    Redis的几个核心机制底层原理
    Java内存模型
    JAVA原子组件和同步组件
    DataGrid 删除一行数据
  • 原文地址:https://www.cnblogs.com/g177w/p/8619732.html
Copyright © 2011-2022 走看看