## 1、设计模式概述
软件设计模式`Design pattern`,又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。
它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。
1995 年,GoF(Gang of Four,四人组/四人帮)合作出版了《设计模式:可复用面向对象软件的基础》一书,共收录了 23 种设计模式,从此树立了软件设计模式领域的里程碑,人称「GoF设计模式」。
| 创建型模式 | 结构型模式 | 行为型模式 |
| :-: | :-: | :-: |
| 工厂方法模式 | 桥接模式 | 备忘录模式 |
| 建造者模式 | 代理模式 | 解释器模式 |
| 抽象工厂模式 | 享元模式 | 命令模式 |
| 原型模式 | 外观模式 | 观察者模式 |
| 单例模式 | 装饰器模式 | 策略模式 |
| | 组合模式 | 状态模式 |
| | 适配器模式 | 模版方法模式 |
| | | 访问者模式 |
| | | 迭代子模式 |
| | | 责任链模式 |
| | | 中介者模式 |
## 2、单例设计模式
单例`Singleton`模式的定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式。
### 2.1 单例模式设计要点
1、单例类只有一个实例对象;
2、该单例对象必须由单例类自行创建;
3、单例类对外提供一个访问该单例的全局访问点;
### 2.2 单例模式代码实现
1、只提供私有的构造方法
2、含有一个该类的静态私有对象
3、提供一个静态的公有的用于创建、获取静态私有对象
## 3、饿汉模式
```
/**
* 饿汉模式:创建对象实例的时候直接初始化
*/
public class HungrySingleton {
// 1. 创建类中私有构造
public HungrySingleton() {}
// 2. 创建该类型的私有静态实例
private static final HungrySingleton instance = new HungrySingleton();
// 3. 创建公有静态方法返回静态实例对象
public static HungrySingleton getInstance() {
return instance;
}
}
```
【编程】某公司研发星球维护系统,请使用饿汉单例模式的实现思想,设计编写地球类。程序运行参考效果图如下:
```
第一个地球创建中...
地球诞生
第二个地球创建中...
第三个地球创建中...
问:三个地球是同一个么?
model.Earth@15db9742
model.Earth@15db9742
model.Earth@15db9742
```
```
public class Test {
public static void main(String[] args) {
System.out.println("第一个地球创建中...");
System.out.println("第二个地球创建中...");
System.out.println("第三个地球创建中...");
System.out.println("问:三个地球是同一个么?");
}
}
public class Earth {
// 定义私有构造方法,并在构造方法中打印输出"地球诞生"
// 定义私有静态类对象并完成实例化
// 定义公有静态方法返回类内的私有静态对象
}
```
## 4、懒汉模式
```
/**
* 懒汉模式:类内实例对象创建时并不直接初始化,直到第一次调用get方法,才完成初始化
*/
public class LazySingleton {
// 1. 创建类中私有构造
private LazySingleton() {}
// 2. 创建该类型的私有静态实例
private static LazySingleton instance = null;
// 3. 创建公有静态方法返回静态实例对象
public static LazySingleton getInstance() {
if (instance == null) {
instance = new LazySingleton();
}
return instance;
}
}
```
【编程】请使用懒汉式单例模式的实现思想,设计编写皇帝类。程序运行参考效果如下:
```
创建1号皇帝对象
创建2号皇帝对象
创建3号皇帝对象
三个皇帝对象依次是:
model.Emperor@15db9742
model.Emperor@15db9742
model.Emperor@15db9742
```
```
public class Test {
public static void main(String[] args) {
System.out.println("创建1号皇帝对象");
System.out.println("创建2号皇帝对象");
System.out.println("创建3号皇帝对象");
System.out.println("三个皇帝对象依次是:");
}
}
public class Emperor {
// 定义私有构造方法
// 定义私有静态类对象
// 定义公有静态方法返回类内的私有静态对象
}
```
【选择】下列关于懒汉式和饿汉式的说法错误的是()(选择两项)
```
A 饿汉式在第一次使用时进行实例化
B 懒汉式在类加载时就创建实例
C 饿汉式的线程是安全的
D 懒汉式存在线程风险
```
- 阶段一 Java 零基础入门
- 步骤1:基础语法
- 第01课 初识
- 第02课 常量与变量
- 第03课 运算符
- 第04课 选择结构
- 第05课 循环结构
- 第06课 一维数组
- 第08课 方法
- 第09课 数组移位与统计
- 第10课 基础语法测试
- 第09课 基础语法测试(含答案)
- 步骤2:面向对象
- 第01课 类和对象
- 第02课 封装
- 第03课 学生信息管理
- 第04课 继承
- 第05课 单例模式
- 第06课 多态
- 第07课 抽象类
- 第08课 接口
- 第09课 内部类
- 第10课 面向对象测试
- 第10课 面向对象测试(含答案)
- 步骤3:常用工具类
- 第01课 异常
- 第02课 包装类
- 第03课 字符串
- 第04课 集合
- 第05课 集合排序
- 第06课 泛型
- 第07课 多线程
- 第08课 输入输出流
- 第09课 案例:播放器
- 第10课 常用工具测试(一)
- 第10课 常用工具测试(一)(答案)
- 第10课 常用工具测试(二)
- 第10课 常用工具测试(二)(答案)
- 阶段二 从网页搭建入门 JavaWeb
- 步骤1:HTML 与 CSS
- 第01课 HTML 入门
- 第01课 HTML 入门(作业)
- 第02课 CSS 入门
- 第02课 CSS 入门(作业)
- 第03课 CSS 布局
- 第03课 CSS 布局(作业)
- 步骤2:JavaScript 与前端案例
- 第01课 JavaScript 入门
- 第01课 JavaScript 入门(作业)
- 第02课 仿计算器
- 第03课 前端油画商城案例
- 第04课 轮播图
- 第05课 网页搭建测试
- 第05课 网页搭建测试(含答案)
- 步骤3:JavaScript 教程
- 入门
- 概述
- 基本语法
- 数据类型
- 概述
- 数值
- 字符串
- undefined, null 和布尔值
- 对象
- 函数
- 数组
- 运算符
- 算术运算符
- 比较运算符
- 布尔运算符
- 位运算符
- 运算顺序
- 语法专题
- 数据类型的转换
- 错误处理机制
- 标准库
- String
- Date
- Math
- DOM
- 概述
- Document 节点
- 事件
- EventTarget 接口
- 事件模型
- 常见事件
- 阶段三 数据库开发与实战
- 步骤1:初始数据库操作
- 第01课 数据类型
- 第02课 表的管理
- 第03课 数据管理
- 第04课 常用函数
- 第05课 JDBC 入门
- 第06课 Java 反射
- 第07课 油画商城
- 第08课 数据库基础测试
- 步骤2:MyBatis 从入门到进阶
- 第01课 IntelliJ IDEA 开发工具入门
- 第02课 Maven 入门
- 第03课 工厂模式
- 第04课 MyBatis 入门
- 第05课 MyBatis 进阶
- 第06课 商品信息管理
- 第07课 MyBatis 基础测试
- 步骤3:Redis 数据库与 Linux 下项目部署
- 第01课 Linux 基础
- 第02课 Linux 下 JDK 环境搭建及项目部署
- 第03课 Redis 入门
- 阶段四 SSM 到 Spring Boot 入门与综合实战
- 步骤1:Spring 从入门到进阶
- 第01课 Spring 入门
- 第02课 Spring Bean 管理
- 第03课 Spring AOP
- 第04课 基于 AspectJ 的 AOP 开发
- 第05课 JDBC Template
- 第06课 Spring 事务管理
- 第07课 人员管理系统开发
- 第08课 Spring 从入门到进阶测试
- 步骤2:Spring MVC 入门与 SSM 整合开发
- 第01课 Spring MVC 入门与数据绑定
- 第02课 Restful 风格的应用
- 第03课 SpringMVC 拦截器
- 第04课 办公系统核心模块
- 步骤3:Spring Boot 实战
- 第01课 Spring Boot 入门
- 第02课 校园商铺项目准备
- 第03课 校园商铺店铺管理
- 第04课 校园商铺商品管理及前台展示
- 第05课 校园商铺框架大换血
- 步骤4:Java 面试
- 第01课 面试准备
- 第02课 基础面试技巧
- 第03课 Web基础与数据处理
- 第04课 主流框架