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、资源加载和性能:

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

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

时间: 2024-11-01 07:59:07

Java基础-单列设计模式的相关文章

(CZ深入浅出Java基础)设计模式笔记

一.面向对象思想设计原则 1.单一职责原则 其实就是开发人员经常说的"高内聚,低耦合",也就是说,每个类应该只有一个职责,对外只能提供一种功能,而引起类变化的原因应该只有一个.在设计模式中,所有的设计模式都遵循这一原则. 2.开闭原则 核心思想是:一个对象对扩展开放,对修改关闭.其实开闭原则的意思就是:对类的改动是通过增加代码进行的,而不是修改现有代码.也就是说软件开发人员一旦写出了可以运行的代码,就不应该去改动它,而是要保证它能一直运行下去,如何能够做到这一点呢?这就需要借助于抽象和

Java基础——单列

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权:凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记. hashCode() 产生一个数字 作为一个标识 以后做比较,可以拿这个编号来做比较,有数字的比较方案,也有equals的比较方案,字符串也是可以用hashCode来作比较的 重写hashCode的写法:写几个私有属性,用get和set封装起来 写个测试类:只有内容一样,那运行出来的hashCode就一样,这也是一种比较的手段,两个对象的比较 单例设计模式:

毕向东—Java基础知识总结(超级经典)

Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java语言代码把思路体现出来. 学习新技术的四点: 1,该技术是什么? 2,该技术有什么特点(使用注意): 3,该技术怎么使用.demo 4,该技术什么时候用?test. ------------------------------------------------------ 一:java概述: 19

Java基础知识总结(超级经典)

Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java语言代码把思路体现出来. 学习新技术的四点: 1,该技术是什么? 2,该技术有什么特点(使用注意): 3,该技术怎么使用.demo 4,该技术什么时候用?test. —————————————————————————————————————————————————————— 一:java概述: 19

Java基础面试总结

Get和Post的区别1.Get是从服务器获取数据,Post是向服务器传送数据2.Get的大小2Kb,Post没有限制3.Get安全性低,Post安全性高4.上传文件使用Post 重载和重写1.重载是在同一个类中,具有相同的方法名,但参数的类型和个数不同2.重写是子类继承父类,具有相同的参数和返回值类型,但是方法体不同 String.StringBuffer.StringBuilder的区别1.String 字符串常量 不可变 字符串拼接是是两个不同的空间2.StringBuffer 字符串变量

毕向东java基础总结

Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java语言代码把思路体现出来. 学习新技术的四点: 1,该技术是什么? 2,该技术有什么特点(使用注意): 3,该技术怎么使用.demo 4,该技术什么时候用?test. -------------------------------------------------------------------

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

一.单列设计模式 1.设计模式:解决某一类问题的最行之有效的方法. 2.Java中有23中基本设计模式. 3.单列设计模式:一个类在内存中只有一个对象. 为了达到单列设计模式,如下考虑: 1. 为了避免其他程序过多建立该类对象,所以要先禁止其他程序建立该类对象. 2. 但是为了有一个该类对象可用,所以只有通过自己建立一个本类对象. 3. 为了让其他程序使用该对象,所以要对外提一些访问方式. 有了上述思考,于是有了如下步骤: 1. 将其构造私有化 (使用 private 修饰构造函数) 2. 在类

java 基础(二)

java 基础(二)java 基础(二) 2016-2-1 by Damon 61. 编写多线程程序有几种实现方式 Java 5以前实现多线程有两种实现方法:一种是继承Thread类:另一种是实现Runnable接口.两种方式都要通过重写run()方法来定义线程的行为,推荐使用后者,因为Java中的继承是单继承,一个类有一个父类,如果继承了Thread类就无法再继承其他类了,显然使用Runnable接口更为灵活. 补充:Java 5以后创建线程还有第三种方式:实现Callable接口,该接口中的

2.Java基础之Runtime对象

毕向东老师Java基础学习笔记——Runtime对象 今天学习Java中的Runtime对象后,感觉这个对象对我们主要有以下几点用处. 1.使用java代码打开本地可执行文件,比如打开一个计算器. 2.打开一个程序,并用该程序打开一个支持的文件. 比如:1.打开记事本,用记事本打开*.java文件, 2.打开暴风影音播放器,用播放器打开一个本地视频. 范例代码如下: /************************************** Runtime对象: 1.该类并没有提供构造函数.