设计模式
-
https://www.runoob.com/ 这上面有很多东西很好。
-
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
-
就是很多个总结了经验,写出了一套优秀的代码。可以在很多地方实现低耦合、高内聚。代码移植性高,可重用性强的。
1、单例设计模式
- 在整个应用系统中,只有一个实例对象
- 优点:节省内存,可以复用
- 缺点:有线程安全问题
2、实现方式
- 懒汉式:线程不安全的
- 懒汉式:线程安全【双重校验锁】
- 饿汉式:天生线程安全的
2.1 懒汉式
-
实现步骤
- 创建一个类
- 构造器私有
- 创建一个私有的静态的实例对象,不用赋值
- 创建一个公有的静态的返回实例对象的方法
- 创建一个类
-
具体实现
- 线程非安全的
javapackage com.sw.java2024.pojo; /** * 懒汉式 * 有线程安全问题 **/ public class Singleton01 { //- 构造器私有 private Singleton01(){} //- 创建一个私有的静态的实例引用,不用赋值 private static Singleton01 singleton = null; //- 创建一个公有的静态的返回实例对象的方法 public static Singleton01 getInstance(){ if(singleton == null) { singleton = new Singleton01(); } return singleton; } }
- 线程安全【双重校验锁】
javapackage com.sw.java2024.pojo; /** * 懒汉式 * 解决线程安全问题 **/ public class Singleton02 { //- 构造器私有 private Singleton02(){} //- 创建一个私有的静态的实例引用,不用赋值 //volatile : 能够禁止指令重排 private static volatile Singleton02 singleton = null; //- 创建一个公有的静态的返回实例对象的方法 //双重校验锁:OK,禁止指令重排 public static Singleton02 getInstance(){ if (singleton == null) { synchronized (Singleton02.class) { if(singleton == null) { singleton = new Singleton02(); } } } return singleton; } }
2.2 饿汉式
- 优点:线程安全
- 缺点:会造成一定内存浪费
- 实现步骤
- 创建一个类
- 构造器私有
- 创建一个私有的静态的实例对象,直接赋值
- 创建一个公有的静态的返回实例对象的方法
- 创建一个类
java
package com.sw.java2024.pojo;
/**
* 饿汉式
* 线程安全
**/
public class Singleton03 {
//- 构造器私有
private Singleton03(){}
//- 创建一个私有的静态的实例引用,直接赋值
private static Singleton03 singleton = new Singleton03();
//- 创建一个公有的静态的返回实例对象的方法
public static Singleton03 getInstance(){
return singleton;
}
}