设计模式之-单例模式

目录

概述

特点

优点

模式

恶汉式、懒汉式


单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 单例模式有分为饿汉式和懒汉式

概述

特点

  • 1、单例类只能有一个实例。

  • 2、单例类必须自己创建自己的唯一实例。

  • 3、单例类必须给所有其他对象提供这一实例。

  • 应用实例:

  • 1、一个班级只有一个班主任。

  • 2、Windows 是多进程多线程的,在操作一个文件的时候,就不可避免地出现多个进程或线程同时操作一个文件的现象,所以所有文件的处理必须通过唯一的实例来进行。

  • 3、一些设备管理器常常设计为单例模式,比如一个电脑有两台打印机,在输出的时候就要处理不能两台打印机打印同一个文件。

优点

  • 1、在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例)。

  • 2、避免对资源的多重占用(比如写文件操作)。

  • 缺点:没有接口,不能继承,与单一职责原则冲突,一个类应该只关心内部逻辑,而不关心外面怎么样来实例化。

  • 使用场景:

  • 1、要求生产唯一序列号。

  • 2、WEB 中的计数器,不用每次刷新都在数据库里加一次,用单例先缓存起来。

  • 3、创建的一个对象需要消耗的资源过多,比如 I/O 与数据库的连接等。

模式

恶汉式、懒汉式

  恶汉单例模式:

package test02;

/**
 * @program: TestDemo
 * @description:
 * @author: xin yi
 * @create: 2021-08-24 18:39
 */

/**
 * 恶汉单例模式
 */
public class Single01 {
    /*1---定义私有静态变量,类型为类变量*/
    /*直接创建好对象,不论倒地会用到用不到,故俗称饿汉式*/
    private static Single01 instance = new Single01();
    /*2---定义私有构造函数*/
    private Single01(){

    }
    /*3---定义公共静态方法,返回静态私有变量*/
    public static Single01 getInstance(){
        return instance;
    }

}
懒汉单例模式
package test02;

/**
 * @program: TestDemo
 * @description:
 * @author: xin yi
 * @create: 2021-08-24 18:39
 */

/**
 * 懒汉单例模式
 */
public class Single02 {
    /*1---定义私有静态变量,类型为类类型*/
    /*先不创建,等到用的时候再创建(正式由于等到用时才创建,孤儿才称为懒汉式)*/
    private static Single02 instance = null;
    /*2---定义私有构造函数*/
    private Single02(){

    }
    /*3===定义公共静态方法,返回私有静态变量*/
//    线程不安全的
//    public static Single02 getInstance(){
      /**/
    public static synchronized Single02 getInstance(){
        /*线程安全,通过synchronized保证线程安全*/
        if (null == instance){
            instance = new Single02();
        }
        return instance;
    }
}

  内部类创建方式-单例模式

package test02;

/**
 * @program: TestDemo
 * @description:
 * @author: xin yi
 * @create: 2021-08-24 18:39
 */

/**
 * 内部类创建方式-单例模式
 * 这种方式是线程安全的
 */
public class Single03 {
    /*1---定义静态内部类,类里面有静态内部属性,为类属性*/
    private static class SingleSingleClass{
        private static final Single03 instance = new Single03();
    }
    /*2---定义私有构造函数*/
    private Single03(){

    }
    /*3---定义公共静态方法,返回内部类的静态常量*/
    public static Single03 getInstance(){
        return SingleSingleClass.instance;
    }
}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xinyi_java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值