Java基础-单列设计模式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础-单列设计模式相关的知识,希望对你有一定的参考价值。

概念:
  Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例、饿汉式单例、登记式单例。
  单例模式有以下特点:
  1、单例类只能有一个实例。
  2、单例类必须自己创建自己的唯一实例。
  3、单例类必须给所有其他对象提供这一实例。
  单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。总之,选择单例模式就是为了避免不一致状态,避免政出多头。

今天我们写 懒汉 和 饿汉

先来饿汉

code如下

class Single //饿汉式
{
static Single s = new Single();
private Single(){}

public void speak(){
System.out.println("haoren");
}

public static Single made(){
return s;
}
}

我们可以看到 饿汉 老早就已经 准备好 吃饭的准备了 一开始 就 已经 new 了Single 也就是 说 他已经在把 吃饭用的筷子 盘子 早就 拿出来了 就等 上菜 

然后是 懒汉式

code 如下 

class Single //懒汉式
{
static Single s = null;
private Single(){}

public void speak(){
System.out.println("haoren");
}

public static Single made(){
if(s==null)
s = new Single();
return s;
}
}

 我们可以看到 懒汉 他貌似 对吃 不是很在意 吃之前还要坚持一下 饭菜 可口不 还要 闻闻一下  然后再吃 =2333

他们之间的对比

1、线程安全:

饿汉式天生就是线程安全的,可以直接用于多线程而不会出现问题,

 

2、资源加载和性能:

饿汉式在类创建的同时就实例化一个静态对象出来,不管之后会不会使用这个单例,都会占据一定的内存,但是相应的,在第一次调用时速度也会更快,因为其资源已经初始化完成,

而懒汉式顾名思义,会延迟加载,在第一次使用该单例的时候才会实例化对象出来,第一次调用时要做初始化,如果要做的工作比较多,性能上会有些延迟,之后就和饿汉式一样了。

 

























以上是关于Java基础-单列设计模式的主要内容,如果未能解决你的问题,请参考以下文章

JAVA学习的书单列一下

Java单列模式

Java设计模式思想(单列模式,工厂模式,策略模式)

设计模式: 单列设计模式 模块方法设计模式

JAVA基础之集合

java kafka单列模式生产者客户端