企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## 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 懒汉式存在线程风险 ```