题外话
写代码:
1,明确需求——我要做什么?
2,分析思路——我要怎么做?1,2,3。
3,确定步骤——每一个思路部分用到哪些语句,方法,和对象。
4,代码实现——用具体的java语言代码把思路体现出来。
学习新技术的四点:
1,该技术是什么?
2,该技术有什么特点(使用注意):
3,该技术怎么使用。demo
4,该技术什么时候用?test。
这是网上看到的觉得很贴合实际就码下来了
概念: java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍常用的两种:懒汉式单例、饿汉式单例。
饿汉式和懒汉式区别
从名字上来说,饿汉和懒汉,
饿汉就是类一旦加载,就把单例初始化完成,保证getInstance的时候,单例是已经存在的了,
而懒汉比较懒,只有当调用getInstance的时候,才回去初始化这个单例。
由于LZ现在是初学者,详细概念不深。
具体的,推荐博文:JAVA设计模式之单例模式可以去看看
思想:
1,不让其他程序创建该类对象。
2,在本类中创建一个本类对象。
3,对外提供方法,让其他程序获取这个对象。
步骤:
1,因为创建对象都需要构造函数初始化,只要将本类中的构造函数私有化,其他程序就无法再创建该类对象;
2,就在类中创建一个本类的对象;
3,定义一个方法,返回该对象,让其他程序可以通过方法就得到本类对象。(作用:可控)
代码体现:
1,私有化构造函数;
2,创建私有并静态的本类对象;
3,定义公有并静态的方法,返回该对象。
饿汉式
//单例模式之饿汉模式 public class Singleton { //1、将构造方法私有化,不允许外部直接创建对象 private Singleton(){ } //2、创建类的唯一实例 private static Singleton instance = new Singleton(); //3、提供一个用于获取实例的方法。使用public static修饰 public static Singleton getInstance(){ return instance; } }
懒汉式
//单例模式之懒汉式,延迟加载 public class Singleton2 { //1.将构造方式私有化,不允许外部直接创建实例对象 private Singleton2(){ } //2.声明类的唯一实例,使用private static修饰 private static Singleton2 instance; //3.提供一个用于获取实例对象的方法 public static Singleton2 getInstance(){ if(instance == null){ instance = new Singleton2(); } return instance; } }
对于线程安全方面:(详细自行百度)
饿汉单例模式加载类时比较慢,获取对象速度快。线程是安全的。
懒汉单例模式加载快,获取对象速度相对慢。线程是不安全的。
测试:
public class Test { public static void main(String[] args) { //饿汉模式 Singleton s1 = Singleton.getInstance(); Singleton s2 = Singleton.getInstance(); if(s1 == s2){ System.out.println("s1和s2是同一个实例"); }else{ System.out.println("s1和s2是不是同一个实例"); } //懒汉模式 Singleton2 s3 = Singleton2.getInstance(); Singleton2 s4 = Singleton2.getInstance(); if(s3 == s4){ System.out.println("s31和s4是同一个实例"); }else{ System.out.println("s3和s4是不是同一个实例"); } } }
输出结果:
s1和s2是同一个实例 s31和s4是同一个实例